1) Вызов AsyncWaitHandle.WaitOne может заблокировать клиента или заблокировать клиента.
2) В чем разница между WaitAll, WaitOne, WaitAny?
Ответ 1
WaitHandle.WaitOne() - это метод экземпляра, который будет блокироваться до тех пор, пока не будет сигнализирован дескриптор ожидания (когда операция будет завершена). Если это уже было сообщено ранее (т.е. Операция уже завершена), возможно, что вызов WaitOne() не будет заблокирован.
WaitHandle.WaitAll() и WaitHandle.WaitAny() являются статическими методами, которые позволяют вам одновременно указывать несколько команд ожидания:
WaitHandle.WaitAll() будет ждать, пока все указанные дескрипторы не будут переданы до того, как они вернутся.
WaitHandle.WaitAny() будет возвращен, как только будет указан любой из указанных ручек.
Эти методы позволяют одновременно отслеживать ряд выдающихся асинхронных операций.
Фон: AsyncWaitHandle - это имя свойства в интерфейсе IAsyncResult. Фактическим типом этого свойства является WaitHandle, который является абстрактным базовым классом для таких типов, как Semaphore, Mutex и Manual/AutoResetEvent.
Эти методы позволяют ждать событий Windows. WaitOne не статичен и ждет дескриптора события для этого объекта. WaitAll и WaitAny - это статические методы класса, которые ждут группу обработчиков событий. WaitAll ожидает, что все события будут сигнализированы и WaitAny для одного события в группе.