我试图在不冻结UI的情况下在后台执行操作。在不冻结UI的情况下运行长时间任务
当然,我可以为此使用BackgroundWorker。
但是,我只想用Task API来完成它。
我想:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
和
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
所以,我应该回去的BackgroundWorker?或者只有使用任务的解决方案?
为什么很多人不喜欢BackgroundWorker?我喜欢它,并直接找到语法。 – Paparazzi 2012-04-08 20:15:04
'BackgroundWorker'远远好于'Thread',但'基于Task'的API最终将占据主导地位。我有[相关的博客文章](http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html)。 'Task.Run'具有以下优点:(1)允许嵌套; (2)取消支持使用统一的'CancellationToken'系统; (3)异常使用正确的调用堆栈更自然地传播; (4)更自然地检索结果; (5)使用较少的资源(线程池而不是专用线程)。 – 2012-04-09 12:35:29