【发布时间】:2015-09-23 13:37:50
【问题描述】:
在关注点分离中,我有一个Controller、Handler和Repository。如果我希望数据库IO异步完成,我应该把async方法放在哪里?
例如,我目前有以下:
在控制器中
public async Task<ActionResult> CreateOrder(OrderCreateModel ocm)
{
var order = await Using<CreateOffer>().Exeucte(ocm, userID);
...
}
在处理程序中
public async Task<Order> Execute(OrderCreateModel ocm, Guid userID)
{
...
return await _ordersRepository.CreateOrderAsync(new Order(ConvertToDataObject(ocm, userID));
}
最后,在存储库中
public async Task<Order> CreateOrderAsync(Order newOrder)
{
context.orders.Add(newOrder);
await context.SaveChangesAsync();
return newOrder;
}
这似乎是太多的异步方法。如果我会得到相同的结果:
- 只是使存储库方法异步(以及所有上述方法同步)?
- 或者如果我只是让 Controller 方法异步(并使所有底层调用同步)?
遍历不同层以使数据操作异步的最佳做法是什么?
【问题讨论】:
标签: c# entity-framework asynchronous async-await task