异步方法正确吗? ReSharper的警告(async Methods correct? Res

2019-07-20 17:16发布

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

现在,我不知道如果我在正确的方式使用此异步的事情。

Answer 1:

现在,我不知道如果我在正确的方式使用此异步的事情。

这听起来并不喜欢它。 仅仅因为你有一个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;
}


Answer 2:

没有什么你等待你的方法中,所以后来标记为async是毫无意义的。 这就是为什么ReSharper的警告你。

你应该学习如何启动async / await :作品http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx



Answer 3:

如果你是不是在你的最后两个方法等待什么,然后取出从声明异步。 在这种情况下,创建并返回任务将足以实现你想要的。



文章来源: async Methods correct? Resharper warning