Task.ContinueWith的替代品

本文关键字:替代品 ContinueWith Task | 更新日期: 2023-09-27 18:35:07

我使用以下包装器Task.Run来运行任务并测量它花费了多长时间:

private static Task<MyObject> RunTask(Func<MyObject> task)
{
    var watch = Stopwatch.StartNew();
    var result = Task.Run(task);
    result.ContinueWith(t =>
    {
        watch.Stop();
        t.Result.ExecutionTimeInMs = watch.ElapsedMilliseconds;
    });
    return result;
}

我已经多次看到避免ContinueWith而是使用await的建议。你能帮我做到吗?

Task.ContinueWith的替代品

这很简单。您需要在方法中使用 async 修饰符,并在Task.Runawait

private static async Task<MyObject> RunTask(Func<MyObject> task)
{
    var watch = Stopwatch.StartNew();
    var result = await Task.Run(task);
    watch.Stop();
    result.ExecutionTimeInMs = watch.ElapsedMilliseconds;
    return result;
}