我正在尝试在后台执行操作,而不会冻结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吗?或者是否只有使用任务的解决方案?
答案 0 :(得分:16)
你非常接近。
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await Task.Run(() => LongOperation());
}
async
does not execute a method on a thread pool thread。
Task.Run
在线程池线程上执行操作,并返回表示该操作的Task
。
如果您在Task.Wait
方法中使用async
,那么您就是doing it wrong。你应该在await
方法中async
任务,永远不要阻止它们。