任务运行并忘记扩展
在某些情况下(例如日志记录),运行任务可能很有用,而不是等待结果。以下扩展允许运行任务并继续执行其余代码:
public static class TaskExtensions
{
public static async void RunAndForget(
this Task task, Action<Exception> onException = null)
{
try
{
await task;
}
catch (Exception ex)
{
onException?.Invoke(ex);
}
}
}
仅在扩展方法内等待结果。由于使用了 async
/ await
,因此可以捕获异常并调用可选方法来处理它。
如何使用扩展程序的示例:
var task = Task.FromResult(0); // Or any other task from e.g. external lib.
task.RunAndForget(
e =>
{
// Something went wrong, handle it.
});