任务运行并忘记扩展

在某些情况下(例如日志记录),运行任务可能很有用,而不是等待结果。以下扩展允许运行任务并继续执行其余代码:

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.
    });