Подробная информация о AsyncWaitHandle.WaitOne

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.

См. также: Блокирование выполнения приложения с использованием AsyncWaitHandle (MSDN)

Ответ 2

Эти методы позволяют ждать событий Windows. WaitOne не статичен и ждет дескриптора события для этого объекта. WaitAll и WaitAny - это статические методы класса, которые ждут группу обработчиков событий. WaitAll ожидает, что все события будут сигнализированы и WaitAny для одного события в группе.