c# - 以异步方法返回 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;
}
解决方案
简单的; 要么不成功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();
}
(请注意,这在很大程度上取决于同步上下文,如果有的话)
推荐阅读
- c# - 从 C# 运行 SSRS 报告时如何正确传递多值整数参数
- regex - 字符串中带有可选单词的正则表达式
- python - Numpy:在引用前一行值时使用矢量化循环?
- javascript - 在 Android 上接收文件
- mysql - 如果我想创建一个类似于 facebook 的具有“反应”的数据库,这种架构有意义吗?
- java - 使用 Post 动词,Spring Java 设置 Body Application/json,不带参数
- matrix - 将值代入 MuPad 矩阵中的变量
- haskell - Haskell 中的惰性加泰罗尼亚数字
- laravel - 如何使用 Redis TLS 配置 Laravel 5.7(使用 phpredis)
- delphi - Delphi:如何获取TImgView32控件滚动条的位置?