我使用並行任務庫在後臺運行異步任務。有時我不得不等待後臺任務完成的委託,而UI線程不被阻塞。並行任務無阻塞地等待用戶界面
所以:
- 在UI線程開始微調
- 在後臺做,需要有一些工作等待
- 後執行另一個後臺任務
- 在UI 停止微調
我在UI線程(2)啓動後臺任務後,我試圖調用Wait方法,這是導致死鎖.. 。
我需要一個解決方案來等待指定的後臺任務,而不會阻塞UI線程。 .NET框架是4,所以我不能用async
和await
更新:
在UI線程:
Task task = Task.Factory.StartNew<T>(() => BackgroundTask());
task.ContinueWith(task => CompletedTask(((Task<T>)task).Result); // I want to prevent later tasks to start before this task is finished
task.Wait(); // this will block the ui...
任何意見讚賞。
你在Visual Studio 2012或更新的版本?如果是這樣的話,你可以使用包[[Microsoft.Bcl.Async'](https://www.nuget.org/packages/Microsoft.Bcl.Async)在.NET 4.0中啓用異步/等待) –
不幸的是,VS 2010 – hcpeter
使用Stephen Toub的'Then'或'Iterate'模式。更多細節:http://stackoverflow.com/a/22291625/1768303 – Noseratio