因此,我的应用程序需要执行一个动作几乎不间断(每次运行之间有10秒左右的暂停) ,只要应用程序运行或取消请求。它需要做的工作可能需要30秒。
使用系统是否更好。计时器。计时器和使用自动重置,以确保它不执行的行动之前,上一个“刻度”已经完成。
或者我应该在 LongRun 模式中使用带有取消令牌的常规 Task,并在其中使用一个常规的无限 while 循环来调用用10秒线程执行的操作。在电话间隙睡觉?至于异步/等待模型,我不确定它是否适合这里,因为我没有任何工作的返回值。
CancellationTokenSource wtoken;
Task task;
void StopWork()
{
wtoken.Cancel();
try
{
task.Wait();
} catch(AggregateException) { }
}
void StartWork()
{
wtoken = new CancellationTokenSource();
task = Task.Factory.StartNew(() =>
{
while (true)
{
wtoken.Token.ThrowIfCancellationRequested();
DoWork();
Thread.Sleep(10000);
}
}, wtoken, TaskCreationOptions.LongRunning);
}
void DoWork()
{
// Some work that takes up to 30 seconds but isn't returning anything.
}
或者在使用 AutoReset 属性时使用一个简单的计时器,然后调用?