Согласно MSDN
Метод Task.ContinueWith
Создает продолжение, которое выполняется асинхронно, когда целевая задача завершается.
Это означает, что после завершения основной задачи другие элементы в двух ваших вызовах ContinueWith будут выполняться параллельно друг другу.
Чтобы продемонстрировать это, используйте код ниже:
System.Threading.Tasks.Task task = new System.Threading.Tasks.Task(() => Console.WriteLine("1"));
task.ContinueWith((t) => { System.Threading.Thread.Sleep(1000); Console.WriteLine("2"); });
task.ContinueWith((t) => Console.WriteLine("3"));
Окно вывода будет выглядеть следующим образом:
1
3
2
Чтобы помочь вам в вашем вопросе, я всегда использовал System.ComponentModel.BackgroundWorker
для последовательного запуска задач.Возможно, есть лучшие способы, но сейчас это работает для меня.
public void Execute(object parameter)
{
BackgroundWorker bgW = new BackgroundWorker();
bgW.DoWork += (s, args) =>
{
AddTimeStampsToFiles(fileList, progressDialogViewModel);
ResequenceFiles(fileList, progressDialogViewModel);
};
bgW.RunWorkerCompleted += (s, args) =>
{
m_ViewModel.RaiseImageProcessingEndingEvent();
};
m_ViewModel.RaiseImageProcessingStartingEvent();
bgW.RunWorkerAsync();
}
Чтобы это работало, вам может потребоваться передать значения fileList
и progressDialogViewModel
в метод bgW.RunWorkerAsync()
.
Для нескольких значений я обычно использую объект Dictionary<string, object>
, поэтому могу ссылаться на значения по имени.
Надеюсь, это поможет.