我使用Parallel Task库在后台运行异步任务。有时我必须等待后台任务完成的委托,而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...
任何建议表示赞赏。
答案 0 :(得分:1)
使用ContinueWith
附加任务的延续并在任务完成时运行一些代码。 await
在幕后做了同样的事情。
当所有任务集合完成后,您可以使用Task.Factory.ContinueWhenAll
运行延续。
您可以在UI线程中使用TaskScheduler.FromCurrentSynchronizationContext()
来获取能够在UI线程中安排任务的任务调度程序。