c# - 结合 ManualResetEvent 和 token.WaitHandle.WaitOne

标签 c# .net multithreading task

我得到了:

internal void Start(CancellationToken token)
{
   while (!token.IsCancellationRequested)
   {
       //do work
       token.WaitHandle.WaitOne(TimeSpan.FromSeconds(67));
   }       
}

所以我在新的 Task 中开始这个方法并在循环中做一些工作直到我需要用 token 取消它 有时我需要强制执行新的循环迭代,而无需等待这 67 秒。 我想我需要这样的东西:

public ManualResetEvent ForceLoopIteration { get; set; }

与此同时,我无法理解如何将它与 token 一起使用。 也许像 WaitHandle.WaitAny() 这样的东西?

最佳答案

你走对了,试试这个:

WaitHandle.WaitAny(
    new[] { token.WaitHandle, ForceLoopIteration },
    TimeSpan.FromSeconds(67));

这等待以下情况之一的发生

  • 请求取消 token
  • ForceLoopIteration 已设置
  • 67 秒超时时间已过

关于c# - 结合 ManualResetEvent 和 token.WaitHandle.WaitOne,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23652224/

相关文章:

c# - 如何从虚拟键代码转换为 System.Windows.Forms.Keys

c - pthread 示例中的查询 regaring 代码序列

c# - 为什么 Box2D/Farseer EdgeShape 定义了 4 个顶点?

c# - <ID,对象> 列表的最佳数据类型?

c# - 垂直调整 StackPanel 的大小以适应其内容

.net - .NET 可以拦截和更改 css 文件吗?

c# - Linq-to-Entities 查询中的动态条件

java - 在线程上运行 GoogleApiClient 会导致错误

c - C中的多线程for循环

c# - 为什么现在类倾向于定义为接口(interface)?