Блокирует ли AsyncWaitHandle.WaitOne поток CLR? Или это создает порт завершения ввода / вывода? - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть этот вопрос, AsyncWaitHandle.WaitOne блокирует поток CLR? или это создает порт завершения ввода / вывода?

Например, когда я запускаю свое приложение, я запускаю задачу «А», которая инициализирует некоторые данные, когда приходят новые запросы, я хочу, чтобы они подождали, пока «А» не закончится, поэтому я могу выполнить IAsyncResult.AsyncWaitHandle.WaitOne, но ... блокирует ли вызывающий поток до конца «A» или создает порт завершения ввода / вывода, который также будет уведомлен о завершении «A».

Если нет, есть ли способ сделать это?

Привет.

1 Ответ

4 голосов
/ 12 декабря 2011

Да, он блокирует поток, но, как и любой другой WaitHandle, он блокирует ядро ​​ОС, поэтому не требует времени процессора.

Если вы не хотите блокировать поток, но хотите «обратный вызов», вы можете использовать пул потоков:

ThreadPool.RegisterWaitForSingleObject( waitHandle, callback, ...
...