AutoResetEvent 仅在未设置该次数时才等待的最佳方法

发布于 2024-10-02 11:43:26 字数 374 浏览 3 评论 0原文

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

I'm probably going outside of the proper design for an AutoResetEvent but don't quite know what to turn to. I want this behavior:

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();

Unfortunately (for my problem), this is not how an AutoResetEvent behaves. What is the best class to use for this situation?

Note: I have access to the .NET Parallel Exensions library.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮光之海 2024-10-09 11:43:26

您是否正在寻找信号量

Are you looking for a Semaphore?

浅黛梨妆こ 2024-10-09 11:43:26

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

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/

If you have the ability to use the Parallel Extensions Library then you should use that instead. It is trivial to invoke worker tasks and then wait on them to finish executing.

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

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

task.Wait();

This should produce the following output:

Waiting on task...
I'm Awake!

For more reading on threading in .Net including the TPL, you should check out this exceptional resource: http://www.albahari.com/threading/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文