4

我可能超出了 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 并行扩展库。

4

2 回答 2

6

您在寻找信号量吗?

于 2010-11-10T19:05:08.527 回答
0

如果您有能力使用并行扩展库,那么您应该使用它。调用工作任务然后等待它们完成执行是微不足道的。

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/

于 2010-11-10T19:18:32.023 回答