Yes. If it is already signaled, there will be no expectations. It's fine.
In fact, if you look at the returned value of WaitOne(int) , you will see that it returns true if it is already set (or set before the timeout), and false if it does not set the value within your timeout value.
This difference is sometimes important, so keep in mind that there is a return value.
source share