繁体   English   中英

从UI进行并行任务等待而不会阻塞

[英]Parallel Task Wait from UI without blocking

我使用并行任务库在后台运行异步任务。 有时,当UI线程未阻塞时,我必须等待该后台任务的完成委托。

所以:

  1. 在UI线程中启动微调器
  2. 在后台执行一些需要等待的工作
  3. 之后,运行另一个后台任务
  4. 在用户界面中停止微调器

在尝试调用Wait方法之后,我在UI线程(2)中启动了后台任务,这导致死锁...

我需要一个解决方案来等待指定的后台任务,而又不会阻塞UI线程。 .NET Framework是4,所以我不能使用asyncawait

更新:

在用户界面线程中:

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...

任何建议表示赞赏。

您可以使用ContinueWith将延续附加到任务,并在任务完成时运行一些代码。 在幕后, await实际上是在做同样的事情。

当所有任务集合都完成后,可以使用Task.Factory.ContinueWhenAll运行延续。

您可以从UI线程中使用TaskScheduler.FromCurrentSynchronizationContext()获得能够在UI线程中调度任务的任务调度程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM