【发布时间】:2015-12-01 14:39:39
【问题描述】:
我想写的是:
async void Foo()
{
var result = await GetMyTask().IgnoreCancelAndFailure();
ProcessResult(result);
}
代替:
void Foo()
{
GetMyTask().ContinueWith(task => ProcessResult(task.Result),
TaskContinuationOptions.OnlyOnRanToCompletion);
}
但是我不知道如何实现 IgnoreCancelAndFailure 方法,它的签名如下:
//On cancel or failure this task should simply stop and never complete.
Task<T> IgnoreCancelAndFailure<T>(this Task<T> task)
{
throw new NotImplementedException();
}
如果可能,我应该如何实现 IgnoreCancelAndFailure?
【问题讨论】:
-
任务取消或失败应该返回什么结果?
-
它根本不应该返回。此任务的继续也应该获得 Cancelled/Failure 状态。
-
但是调用者期望返回值......你不能只说“不返回任何东西”
-
@KeyboardDrummer 我明白了你想在这里做什么,但从技术上讲这是不可能的。如果出现故障,您希望该函数停止运行,但是您不能调用一个函数取消另一个函数的运行,您必须将该逻辑构建到调用函数中。
-
@KeyboardDrummer 那么你不需要做任何事情。您正在询问如何创建与另一个任务相同的任务(如果成功则具有相同的结果,如果出错则具有相同的错误,同时产生结果)。只需使用原始的
Task。