任務執行並忘記擴充套件

在某些情況下(例如日誌記錄),執行任務可能很有用,而不是等待結果。以下擴充套件允許執行任務並繼續執行其餘程式碼:

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