Лучший способ для AutoResetEvent ждать только тогда, когда нет Установите это количество раз - PullRequest
4 голосов
/ 10 ноября 2010

Я, вероятно, выхожу за пределы правильного дизайна для AutoResetEvent, но не знаю, к чему обратиться.Мне нужно следующее поведение:

var autoResetEvent = new AutoResetEvent(false);
autoResetEvent.Set();
autoResetEvent.Set();
autoResetEvent.WaitOne();
// since Set was called twice, I don't want to wait here
autoResetEvent.WaitOne();

К сожалению (для моей проблемы), это не то, как ведет себя AutoResetEvent.Какой класс лучше использовать в этой ситуации?

Примечание. У меня есть доступ к библиотеке .NET Parallel Exensions.

Ответы [ 2 ]

6 голосов
/ 10 ноября 2010

Вы ищете Семафор ?

0 голосов
/ 10 ноября 2010

Если у вас есть возможность использовать библиотеку параллельных расширений, используйте ее вместо этого. Тривиально вызывать рабочие задачи, а затем ждать, пока они завершат выполнение.

var task = Task.Factory.StartNew(() => {
    Thread.Sleep(1000);
    Console.WriteLine("I'm Awake!");
});

Console.WriteLine("Waiting on task...");

task.Wait();

Это должно привести к следующему выводу:

В ожидании задания ...
Я проснулся!

Для получения дополнительной информации о многопоточности в .Net, включая TPL , вы должны проверить этот исключительный ресурс: http://www.albahari.com/threading/

...