【问题标题】:Do I need to use await with both Add and SaveChanges?我是否需要将 await 与 Add 和 SaveChanges 一起使用?
【发布时间】:2018-11-26 04:53:28
【问题描述】:

我现在有这样的代码:

public async Task<IActionResult> Create(PageVM page)
{
...
    await _context.AddAsync(dto);
    await _context.SaveChangesAsync();
}

我想知道是否应该将awaitasync 方法与AddSaveChanges 一起使用,还是仅在一个地方使用它就足够了?

【问题讨论】:

  • 你知道为什么要使用 async/await 吗?
  • await 表示:执行此操作,在此完成之前不要继续进行。我(召唤)将离开并做其他事情(或不做)。完成后告诉我。 现在您知道它的含义,您需要它们吗?

标签: c# asp.net-mvc entity-framework asynchronous


【解决方案1】:

是的,如果您只能访问异步方法,您应该等待它们。如果您可以访问同步调用,您可以考虑 D3ivid 在他的回答 https://stackoverflow.com/a/50891291/8805908 中所说的。

请考虑,如果您选择不等待任何方法,则无法确定在引发事件之前添加了该项目。当您从此方法返回时,您甚至可以开始进一步的任务,该方法假定项目已经添加并且事件已经引发。

【讨论】:

    【解决方案2】:

    SaveChanges 方法执行 EF 内部树中的所有更改,在单独的事务中异步发送查询,并将默认情况下 BBDD 的任何更改(自动数字、触发器等)返回给实体。 Add 方法仅在 EF 的内部树中添加该实体(或 dto)已“添加”。

    从逻辑上讲,它应该只用于异步SaveChangues。对于Add 需要更多时间来创建任务并且您不会优化时间......总是为所有人创建异步方法,这不是一个好方法......

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      相关资源
      最近更新 更多