加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – async方法正确吗? Resharper警告

发布时间:2020-12-16 00:22:26 所属栏目:百科 来源:网络整理
导读:在我的方法RecalcChartAsync我做一些时间密集的东西..所以我想我会做一些事情异步. 我想启动两个方法CreateHistogramAsync CalculatePropValuesAsync,同时在我的RecalcChartsAsync中做一些事情,最后等待它完成. private async void RecalcChartsAsync(){ var
在我的方法RecalcChartAsync我做一些时间密集的东西..所以我想我会做一些事情异步.

我想启动两个方法CreateHistogramAsync CalculatePropValuesAsync,同时在我的RecalcChartsAsync中做一些事情,最后等待它完成.

private async void RecalcChartsAsync()
{
    var histogram = CreateHistogramAsync();
    var propValues = CalculatePropValuesAsync();

    //do some other stuff

    await histogram;
    await propValues;
}

private async Task CreateHistogramAsync()
{
    //do some stuff
}

private async Task CalculatePropValuesAsync()
{
    //do some stuff
}

我不确定我是否采用正确的方式,因为ReSharper在CreateHistogramAsync和CalculatePropValueAsync的异步关键字上给出了以下警告:

This async method lacks ‘await’ operators and will run synchronously. Consider using the await operator to await non-blocking API calls,…

现在我不确定我是否以正确的方式使用这个异步的东西.

解决方法

Now i am not sure if i am using this async thing in the correct way.

听起来不像.仅仅因为你有一个异步方法并不意味着它将在一个单独的线程上运行 – 这听起来就像你期望的那样.当你执行异步方法时,它将同步运行 – 即正常 – 直到它遇到第一个await表达式.如果你没有任何await表达式,那意味着它将正常运行,唯一的区别在于它在状态机中的包装方式,具有由任务表示的完成状态(例外等).

我怀疑你应该将CreateHistogramAsync和CalculatePropValuesAsync方法改为同步:

private void CreateHistogram()
{
    ...
}

private void CalculatePropValues()
{
    ...
}

并使用Task.Run并行执行它们:

private async void RecalcChartsAsync()
{
    var histogram = Task.Run((Action) CreateHistogram);
    var propValues = Task.Run((Action) CalculatePropValues);

    //do some other stuff

    await histogram;
    await propValues;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读