我遵循以下模式:https://blogs.msdn.microsoft.com/dotnet/2012/06/06/async-in-4-5-enabling-progress-and-cancellation-in-async-apis/,所以我在異步方法中使用IProgress.Report來報告進度。我可以等待IProgress.Report
public async Task MyFirstTaskAsync(IProgress<T> progress)
{
progress.report(some T)
}
public async Task MySecondTaskAsync(IProgress<T> progress)
{
progress.report(some T)
}
在UI線程上,我會依次調用MyFirstTaskAsync和MySecondTaskAsync。
var reportProgress1 = new Action<T> (x =>Console.WriteLine("First Step Completed"))
var reportProgress2 = new Action<T> (x =>Console.WriteLine("Last Step Completed"))
var progress1 = new Progress<T>(reportProgress1)
var progress2 = new Progress<T>(reportProgress2)
await MyFirstTaskAsync(progress1)
Console.WriteLine("Second Step Comppleted")
await MySecondTaskAsync(progress2)
//code in reportProgress1.report can actually be executed at this point...
我的問題在這裏是reportProgress1.report代碼實際上可以得到MyFirstTaskAsync後執行已完成,這有點打亂了進度報告,因爲我期待第一的await可以等待,直到第一個異步方法裏面的進度報告也完成了。
這是一種行爲,我可以調整以適應我的需要?
謝謝。
編輯:假設兩個任務之間有一些非異步代碼,這三個人一起完成整個過程,他們每個人都會在運行時更新進度,因此他們必須更新UI中的連續順序..
謝謝。我更新了問題以澄清我的問題。基本上,任務是一起完成整個過程,所以我希望他們的進度更新按特定順序進行。 – Godsent