One could also fix this by not running actions as soon as the EnqueueAction is called (or maybe calling Monitor.Wait before the actions have started), but I didn't want to touch a lot of this code and potentially add new issues.
The issue we're fixing here is that there is a chance that all actions have completed before we hit the Wait call, we need to make sure we don't hit a deadlock.
This can happen if for instance there is only one action, and it is a "dummy" action, such as the one used in the EUA check.
Also I have removed the compound assignment for the volatile _completedActionsCount since Visual Studio was flagging it as a "suspicious usage of a volatile variable". I personally don't think it's a problem but better safe than sorry.
One could also fix this by not running actions as soon as the
EnqueueAction
is called (or maybe callingMonitor.Wait
before the actions have started), but I didn't want to touch a lot of this code and potentially add new issues.The issue we're fixing here is that there is a chance that all actions have completed before we hit the
Wait
call, we need to make sure we don't hit a deadlock.This can happen if for instance there is only one action, and it is a "dummy" action, such as the one used in the EUA check.
Also I have removed the compound assignment for the
volatile _completedActionsCount
since Visual Studio was flagging it as a "suspicious usage of a volatile variable". I personally don't think it's a problem but better safe than sorry.Contains minor whitespace fixes, too