Got it, thanks @maxim! From your answers and from very quickly glancing at the Go implementation I’m thinking that there is some sort of event loop that, among things, processes incoming signals and puts them into the channel, and this event loop only happens when a workflow “wakes back up” after sleeping, running an activity, etc. So therefore as long as I don’t do anything that makes my workflow “sleep” after draining all the channels there will be no chance for that loop to run.
Furthermore, I don’t need to worry about what happens if I crash before I finish draining the channel, because these incoming signals are history events and they will just be replayed to refill the channel on the next execution of the workflow.
Is this all about right? Is there somewhere that the execution model is explained more fully so that I don’t have to bother you with these types of questions?