3 回答
TA贡献1853条经验 获得超9个赞
这取决于您想要的语义。如果您想确保注意到异常,那么可以,您可以执行await此任务。但是在那种情况下,这并不是真正的“抛弃一切”。
真正的“一劳永逸”(在某种意义上说您并不在乎它何时完成或它是否成功完成或出现错误)是极为罕见的。
编辑:
对于异常处理:
public static async void Forget(this Task task, params Type[] acceptableExceptions)
{
try
{
await task.ConfigureAwait(false);
}
catch (Exception ex)
{
// TODO: consider whether derived types are also acceptable.
if (!acceptableExceptions.Contains(ex.GetType()))
throw;
}
}
请注意,我建议使用await而不是ContinueWith。ContinueWith 有一个令人惊讶的默认调度程序(如我的博客所述),Task.Exception并将实际的异常包装在中AggregateException,使错误处理代码更加繁琐。
TA贡献1869条经验 获得超4个赞
是的,如果您对任务是否引发异常感兴趣,那么您将需要await结果,但另一方面,这几乎违背了“解雇 ” 的目的。
在您想知道是否发生不好的情况下,建议的执行方法是使用延续,例如
public static void ForgetOrThrow(this Task task)
{
task.ContinueWith((t) => {
Console.WriteLine(t.Exception);
}, TaskContinuationOptions.OnlyOnFaulted);
}
- 3 回答
- 0 关注
- 608 浏览
添加回答
举报