在后台工作程序中延迟代码执行的正确方法

时间:2014-02-12 14:01:40

标签: c# wpf multithreading

好的,所以我一直在阅读Thread.Sleep,Task.Delay,AutoResetEvent等等

我看到了很多关于使用哪些参数,因为它取决于正在执行的任务。

我目前在所有内容中使用Thread.Sleep并认为我需要开始避免它并使用更好的练习。

这是一个包含BackgroundWorker的客户端应用程序。该工作程序每30分钟运行一次,以检查来自Web服务的更新数据。

然后更新位于MainWindow的3个int变量。这些对UI没有任何作用。它们仅用于检查正在运行的其他工作人员。

是否有一种方法比其他方式更好地延迟?

如果用户退出应用程序并且我正在调用Application.Current.Shutdown(),它是否会继续运行直到Thread.Sleep完成,或者即使线程正在休眠也会退出?

1 个答案:

答案 0 :(得分:4)

使用Task,await和CancellationTokenSource的组合,可以在后台运行,等待而不浪费线程,然后取消。

类似的东西:

var cancel = new CancellationTokenSource();
App.OnShutdown += (s,e) => cancel.Cancel();
await Task.Delay(1000,cancel.Token);