非异步方法返回任务<>

时间:2015-06-09 15:15:42

标签: c# asynchronous

我想知道这两个异步模式之间是否存在差异。显然他们会工作。我想知道是否存在隐藏的陷阱或性能开销。在两种情况下,使用aggregateexception调用堆栈会发生什么?

    //------Pattern1-------- PassThruMethod is awaiting
    public async void EventHandler()
    {
        await PassThruMethod();
    }

    public async Task<int> PassThruMethod()
    {
        return await MyAsyncMethod();
    }

    public Task<int> MyAsyncMethod()
    {
        return Task.Run(() => 1);
    }


    //---Pattern2----- PassThruMethod is not awaiting
    public async void EventHandler()
    {
        await PassThruMethod();
    }

    public Task<int> PassThruMethod()
    {
        return MyAsyncMethod();
    }

    public Task<int> MyAsyncMethod()
    {
        return Task.Run(() => 1);
    }

1 个答案:

答案 0 :(得分:1)

如果您不使用async,则无需使用await - 因为PassThruMethod不需要await,请勿使用它。如果你最终发现它不够好,你可以随时更改它。

使用await确实有一些开销(不是很大,但也有一些),所以对于这样的情况,没有理由使用它。返回Task就好了。