我已经创建了一个运行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")
。
答案 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");