首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UI中并行任务等待而不阻塞

从UI中并行任务等待而不阻塞
EN

Stack Overflow用户
提问于 2014-03-27 13:44:56
回答 1查看 1.3K关注 0票数 0

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

所以:

  1. 在UI线程中启动一个自旋器。
  2. 在后台做一些需要等待的工作
  3. 之后,运行另一个后台任务。
  4. 停止UI中的旋转器

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

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

更新:

在UI线程中:

代码语言:javascript
复制
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...

任何建议都很感激。

EN

回答 1

Stack Overflow用户

发布于 2014-03-27 13:49:56

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22689511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档