Я следую шаблону, описанному по адресу: 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)
}
На потоке пользовательского интерфейса, я позвоню 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 не могу ждать, пока доклад о ходе работы внутри первого метода асинхронного также завершено.
Это поведение, которое я могу как-то настроить, чтобы соответствовать моей потребности?
Спасибо.
Редактирование: предположим, что между двумя задачами существует неасинхронный код, и эти три вместе завершают общий процесс, и каждый из них будет обновлять прогресс по мере их запуска, поэтому им придется обновлять пользовательский интерфейс в последовательный заказ.
Спасибо. Я обновил вопрос, чтобы уточнить мою проблему. Это в основном задачи, вместе завершая общий процесс, поэтому я хочу, чтобы их обновления прогресса происходили в определенном порядке. – Godsent