gpt4 book ai didi

c# - 异步方法正确吗?锐器警告

转载 作者:行者123 更新时间:2023-11-30 13:23:03 26 4
gpt4 key购买 nike

在我的方法 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.

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

我怀疑您应该将 CreateHistogramAsyncCalculatePropValuesAsync 方法更改为同步:

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;
}

关于c# - 异步方法正确吗?锐器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com