我的代码必须定期轮询外部资源。简化,看起来像:
CancellationTokenSource cancellationSource = new CancellationTokenSource();
Task t = Task.Factory.StartNew(() =>
{
while (!cancellationSource.IsCancellationRequested)
{
Console.WriteLine("Fairly complex polling logic here.");
// Finishes sleeping before checking for cancellation request
Thread.Sleep(10000);
}
},
cancellationSource.Token);
如果调用了cancellationSource.Cancel(),我怎么能以这样的方式编码10秒延迟呢?
答案 0 :(得分:4)
如何使用超时为10秒的监视器。您可以使用Monitor类的Pulse方法唤醒睡眠线程
主题1:
Monitor.Wait(monitor, 10000);
主题2:
Monitor.Pulse(monitor);
或者您可以查看ManualResetEvent.WaitOne。以10秒超时阻止线程。要取消阻止,请发出事件信号。
编辑:
CancellationToken具有.WaitHandle属性:
获取一个在取消令牌时发出信号的WaitHandle。
您可以等待该手柄发出信号,超时10秒?