在我的方法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 async关键字以下警告:
这种异步方法缺乏“等待”运营商和将同步运行。 考虑使用的await操作等待非阻塞API调用,...
现在,我不知道如果我在正确的方式使用此异步的事情。
现在,我不知道如果我在正确的方式使用此异步的事情。
这听起来并不喜欢它。 仅仅因为你有一个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
如果你是不是在你的最后两个方法等待什么,然后取出从声明异步。 在这种情况下,创建并返回任务将足以实现你想要的。