我試圖在不凍結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