非异步方法返回Task<>

本文关键字:Task 返回 异步方法 | 更新日期: 2023-09-27 17:54:32

我想知道这两种异步模式是否有区别。显然它们会起作用。我想知道是否有隐藏的陷阱或性能开销。在这两种情况下,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);
    }

非异步方法返回Task<>

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

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