首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架嵌套异步

实体框架嵌套异步
EN

Stack Overflow用户
提问于 2015-09-23 13:37:50
回答 1查看 238关注 0票数 2

在分离关注点时,我有一个Controller、Handler和Repository。如果我希望异步执行数据库IO,那么应该将异步方法放在哪里?

例如,我目前有以下内容:

在主计长中

代码语言:javascript
复制
public async Task<ActionResult> CreateOrder(OrderCreateModel ocm)
{
    var order = await Using<CreateOffer>().Exeucte(ocm, userID);
    ...
}

在手柄里

代码语言:javascript
复制
public async Task<Order> Execute(OrderCreateModel ocm, Guid userID)
{
    ...
    return await _ordersRepository.CreateOrderAsync(new Order(ConvertToDataObject(ocm, userID));
}

最后,在仓库里

代码语言:javascript
复制
public async Task<Order> CreateOrderAsync(Order newOrder)
{
    context.orders.Add(newOrder);
    await context.SaveChangesAsync();
    return newOrder;
}

看起来这是太多的异步方法了。如果我:

  1. 只需使存储库方法异步(和上述所有方法同步)?
  2. 或者,如果我只是使Controller方法异步(并使所有底层调用同步)?

遍历不同层以使数据操作异步的最佳实践是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 13:50:53

你现在有正确的方法。这是一个众所周知的问题,称为“异步一直下降”。基本上,这意味着如果您需要一些代码来实现异步,那么所有的调用方法也应该是异步的。您不应该将同步和异步代码混合在一起,因为死锁和/或完全违背异步代码的目的(即可伸缩性)很容易。

因此,在您的例子中,您编写的代码遵循最佳实践。

有关其他最佳实践,请参见这篇令人惊叹的文章(真的,这是关于IMHO主题的最好文章)。请注意,“全程异步”一章本质上是对您所提问题的回答。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32741193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档