您将如何重写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;
}
答案 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();
}
(请注意,此操作很大程度上取决于同步上下文,如果有的话)