DrainCtrl a non-block function to send out the signal to the ctrl channel
It will retry in blocking mode once the channel is full and make sure it is delivered finally but may lose order
DrainError a non-block function to send out the error to the error channel
Only the first error will be sent out and received then the rule will be terminated
Thus the latter error will just skip
It is usually the error outlet of a op/rule.
SafeRun will catch and return the panic error together with other errors
When running in a rule, the whole rule must be in this mode
The sub processes or go routines under a rule should also use this mode
To make sure all rule panic won't affect the whole system
Also consider running in this mode if the function should not affect the whole system