async方法正确吗?Resharper警告
本文关键字:Resharper 警告 方法 async | 更新日期: 2023-09-27 18:01:30
在我的方法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给了我以下警告在async关键字在CreateHistogramAsync和CalculatePropValueAsync:
这个异步方法缺少'await'操作符,将同步运行。考虑使用await操作符来等待非阻塞API调用,…
现在我不确定我是否以正确的方式使用这个async的东西
现在我不确定我是否以正确的方式使用这个异步的东西。
听起来不像。仅仅因为你有一个async
方法并不意味着它将在一个单独的线程上运行——听起来这就是你所期望的。当你执行一个async
方法时,它将同步运行——也就是说,就像正常运行一样——直到它到达第一个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;
}
在您的方法中没有任何等待,因此将其标记为async
是毫无意义的。这就是ReSharper警告你的原因。
您应该从学习async
/await
如何工作开始:http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
如果您在最后两个方法中没有等待任何内容,那么从声明中删除异步。在本例中,创建并返回任务就足以实现您想要的效果。