如果你在架构中的较低级别使用async/await,是否有必要"冒泡"async/await调用一直向上,这是低效的,因为你基本上是为每个层创建一个新线程(异步调用每个层的异步函数,或者它真的不重要,只是取决于您的偏好?
我正在使用EF 6.0-alpha3,以便我可以在EF中使用异步方法.
我的存储库是这样的:
public class EntityRepository<E> : IRepository<E> where E : class
{
public async virtual Task Save()
{
await context.SaveChangesAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的业务层是这样的:
public abstract class ApplicationBCBase<E> : IEntityBC<E>
{
public async virtual Task Save()
{
await repository.Save();
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我的UI中的方法在调用时会遵循相同的模式.
这是:
即使在单独的图层/项目中没有使用它,如果我在同一个类中调用嵌套方法,则同样的问题也适用:
private async Task<string> Dosomething1()
{
//other stuff
...
return await Dosomething2();
}
private async Task<string> Dosomething2()
{
//other stuff
...
return await Dosomething3();
}
private async Task<string> Dosomething3()
{
//other stuff
... …Run Code Online (Sandbox Code Playgroud) 在任务返回异步方法结束时,如果我调用另一个异步方法,我可以使用await它或return它的任务.每个的后果是什么?
Task FooAsync()
{
return BazAsync(); // Option A
}
async Task BarAsync()
{
await BazAsync(); // Option B
}
Run Code Online (Sandbox Code Playgroud)