C# 来自UI的并行任务等待,无阻塞
我使用并行任务库在后台运行异步任务。有时,我不得不在UI线程未被阻塞时等待后台任务完成的委托 因此:C# 来自UI的并行任务等待,无阻塞,c#,asynchronous,task-parallel-library,C#,Asynchronous,Task Parallel Library,我使用并行任务库在后台运行异步任务。有时,我不得不在UI线程未被阻塞时等待后台任务完成的委托 因此: 在UI线程中启动微调器 在后台做一些需要等待的工作 然后运行另一个后台任务 停止UI中的微调器 我在UI线程(2)中启动了后台任务,之后我尝试调用Wait方法,这会导致死锁 我需要一个解决方案来等待指定的后台任务而不阻塞UI线程。NET framework是4,所以我不能使用async和wait 更新: 在UI线程中: Task task = Task.Factory.StartNew<T
async
和wait
更新:
在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...
Task Task=Task.Factory.StartNew(()=>BackgroundTask());
task.ContinueWith(task=>CompletedTask(((task)task.Result);//我想阻止以后的任务在此任务完成之前启动
task.Wait();//这将阻止ui。。。
感谢您的建议。您可以使用
ContinueWith
为任务附加一个延续,并在任务完成时运行一些代码。wait
在幕后有效地完成了同样的工作
您可以使用Task.Factory.continuewhalll
在所有任务集合完成后运行继续
您可以在UI线程中使用
TaskScheduler.FromCurrentSynchronizationContext()
来获得能够在UI线程中调度任务的任务调度器。谢谢您的回答,我尝试过(可能是我搞错了或没有抓住要点)但它不起作用。当我在UI线程中调用后台任务时,我在已完成的任务中设置ContinueWith。但稍后在UI线程中,我启动另一个任务。我想等待第一个任务完成。这就是我尝试使用wait的原因。@hcpeter请显示您试图编辑问题的内容,我们可以帮助您纠正错误@hcpeter存储对该任务的引用,并在该任务完成后的某个时间点,当您想要执行某项操作时,向该任务添加一个延续,而不是等待。您是否使用Visual Studio 2012或更高版本?如果是这样,您可以使用该包在.NET 4.0中启用async/await。不幸的是,与2010相比,请使用Stephen Toub的然后或迭代模式。更多详细信息: