I got:

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

So i start this method in new Task and do some work in loop untill i need to cancel it with token Some times i need to force new loop iteration, without waiting this 67 seconds. I think i need something like:

public ManualResetEvent ForceLoopIteration { get; set; }

Meanwhile i cant understand how to use it with token. Maybe something like WaitHandle.WaitAny()?

有帮助吗?

解决方案

Youre on the right way, try this:

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

This waits for the occurence of one of the following

  • cancelation is requested on token
  • ForceLoopIteration is set
  • timeout of 67 seconds has been elapsed
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top