Combine ManualResetEvent and token.WaitHandle.WaitOne

本文关键字:WaitHandle WaitOne token and ManualResetEvent Combine | 更新日期: 2023-09-27 18:03:12

我得到了:

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()之类的?

Combine ManualResetEvent and token.WaitHandle.WaitOne

你选对了,试试这个:

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

等待出现以下其中一个

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