等待在iprocess完成之前继续

时间:2015-03-25 13:40:34

标签: c# asynchronous async-await

我已经创建了一个运行X个线程的自定义工厂。我的问题是,在我等待之后执行代码之前,我希望我的ContinueWiths完成。

致电代码:

Task t = _manager.RunCalcsCustomFactory(int.Parse(textTasksToCreate.Text), int.Parse(textMaxThreads.Text), cancelSource.Token, new Progress<string>(UpdateStatus), new Progress<int>(UpdateProgress));

Task errorHandlingTask = t.ContinueWith((tt) => ProcessError(), TaskContinuationOptions.OnlyOnFaulted);
Task cancelTask = t.ContinueWith((tttt) => TasksComplete(), TaskContinuationOptions.OnlyOnCanceled);
await Task.WhenAll(t);

UpdateStatus("Done");

在我的任务中,我立即抛出错误。所以我希望在执行UpdateStatus("Done")之前完成ProcessError。

这是我的输出:

start thread10
Waiting for tasks to finish.
Exception: Too many connections open.
Done
Error: Too many connections open.
ERROR

注意在RunCalcsCustomFactory中UpdateStatus("Error: Too many connections open.")之前显示完成并在ProcessError中运行UpdateStatus("ERROR")

我希望在RunCalcsCustomFactory的回调完成并且ProcessError完成后运行UpdateStatus("Done")

1 个答案:

答案 0 :(得分:0)

只要您的代码中有ContinueWith,您就应该使用async / await代替:

try
{
  await _manager.RunCalcsCustomFactory(int.Parse(textTasksToCreate.Text), int.Parse(textMaxThreads.Text), cancelSource.Token, new Progress<string>(UpdateStatus), new Progress<int>(UpdateProgress));
}
catch (OperationCanceledException)
{
  TasksComplete();
}
catch (Exception ex)
{
  ProcessError();
}

UpdateStatus("Done");