以异步方法返回Task.Run

时间:2018-10-24 10:29:26

标签: c# async-await

您将如何重写TaskOfTResult_MethodAsync以避免错误:由于这是一个异步方法,因此返回表达式必须为int类型,而不是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;
}

1 个答案:

答案 0 :(得分:7)

简单;要么不做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();
}

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