合并ManualResetEvent和token.WaitHandle.WaitOne。

8

我明白了:

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

因此,我在新的任务中启动了这个方法,并在循环中执行一些工作,直到我需要使用token取消它为止。有时,我需要强制进行新的循环迭代,而无需等待这67秒。我认为我需要类似以下内容的东西:

public ManualResetEvent ForceLoopIteration { get; set; }

同时,我不太明白如何使用它与令牌一起。也许像WaitHandle.WaitAny()这样的方式?
1个回答

19

你走对了路,试试这个:

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

等待以下情况之一发生:

  • token上请求取消
  • ForceLoopIteration被设置
  • 经过67秒的超时时间

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接