呼叫同步和异步方法有什么不同吗?

st_*_*nov 1 c# async-await

.NET 4.6

带有“异步”的带有await的调用方法与没有“异步”的相同方法之间有什么区别?

protected Task<MyObject<T>> MyMethod1<T>(string parameter)
{
    return CallDb();
}

protected async Task<MyObject<T>> MyMethod2<T>(string parameter)
{
    return await CallDb();
}

// Calling these
public async Task<IEnumerable<string>>(string parameter)
{
    return await MyMethod1<string>(parameter);
    // Any difference?
    return await MyMethod2<string>(parameter);
}

public Task<string> CallDb()
{
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

如果你在谈论的区别MyMethod1MyMethod2,然后在这个确切的情况,唯一的区别是,MyMethod2有稍微开销和一些非常细微的异常将如何提出不同(在谁的方面被指责)。特别是,MyMethod2最终将分配额外的任务,并且将具有一些额外的异步状态机样板,如果结果不完整,则可能最终被装箱并进入堆CallDb

在一般情况下,如果你不是做需要做任何额外的(预/值,后处理usingfinally等等),我会建议MyMethod1-即不引入的async没有理由的机械。