首页 > 解决方案 > 以异步方法返回 Task.Run

问题描述

您将如何重写TaskOfTResult_MethodAsync以避免错误:由于这是一个异步方法,因此返回表达式必须是 typeint而不是Task<int>.

private static async Task<int> TaskOfTResult_MethodAsync()
{
    return Task.Run(() => ComplexCalculation());
}

private static int ComplexCalculation()
{
    double x = 2;
    for (int i = 1; i< 10000000; i++)
    {
        x += Math.Sqrt(x) / i;
    }
    return (int)x;
}

标签: c#async-await

解决方案


简单的; 要么不成功async

private static Task<int> TaskOfTResult_MethodAsync()
{
    return Task.Run(() => ComplexCalculation());
}

await结果:

private static async Task<int> TaskOfTResult_MethodAsync()
{
    return await Task.Run(() => ComplexCalculation());
}

await就生成的机器而言,在此处添加更昂贵,但具有更明显/可靠的异常处理等)

注意:您也可以使用Task.Yield

private static async Task<int> TaskOfTResult_MethodAsync()
{
    await Task.Yield();
    return ComplexCalculation();
}

(请注意,这在很大程度上取决于同步上下文,如果有的话)


推荐阅读