How you all script a gun with cancellable actions?

im trying to make an gun script over an 3 months or so of an gun that its reloads and other actions are canceled by this, my solution so far was to use coroutines.create and coroutines.stop, but i cant call the function of reloading or cycling to be done again after, ex: i shoot, click again to cycle, unequip, then equip back, and i cant cycle again, how do i make an cancellable reload or actions on unequip at all?