使用取消令牌取消一个具有超时的任务(在超时结束之前),会抛出异常。例如:
mytask.start();
bool didTaskRunInTime = mytask.wait(5 mins, _cancelToken);
这意味着我不能像下面这样继续进行。
//was the task cancelled
if (_cancelToken.IsCancelRequested)
{
// log cancel from user to file etc
}
if (didTaskRunInTime )
{
int taskResult = myTask.Result;
// log result to file
}
else if (!_cancelToken.IsCancelRequested)
{
// Tell user task timed out , log a message etc
}
我必须在捕获块中完成所有这些操作,我的代码看起来很混乱。有什么正确的方法可以做到这一点?
WaitAll
会聚合异常,而WaitAny
则不会。请参考示例代码。 - Jon Skeet