簡體   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