首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不支持并行性,为什么要使用SaveChangesAsync?

如果不支持并行性,为什么要使用SaveChangesAsync?
EN

Stack Overflow用户
提问于 2019-01-08 16:06:05
回答 1查看 302关注 0票数 0

当在两个单独的异步方法中使用EF上下文和调用SaveChangesAsync时,可以在上下文中造成争用条件。如果SaveChangesAsync()可以引起这样的问题,为什么要使用它呢?

Microsoft SaveChangesAsync() -有以下评论。

注:不支持同一上下文实例上的多个活动操作。在此上下文中调用另一个方法之前,请使用“等待”确保任何异步操作都已完成。

代码语言:javascript
复制
public class AccountManager
  {
    private readonly ApplicationDbContext _dbContext;

    public AccountManager(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public async Task UpdateAccountStatus(int id, Status status)
    {
        var acc = await _dbContext.Account.SingleOrDefaultAsync(s => s.Id == id);
        acc.Status = status;
        await _dbContext.SaveChangesAsync();
    }

    public async Task UpdateAccountName(int id, string name)
    {
        var acc = await _dbContext.Account.SingleOrDefaultAsync(s => s.Id == id);
        acc.Name= name;
        await _dbContext.SaveChangesAsync();
    }
}

public class AccountOrchestrator
  {
    private readonly AccountManager _accountManager;

    public AccountOrchestrator(AccountManager accountManager)
    {
        _accountManager= accountManager;
    }

    // Race Condition
    public async Task UpdateAccount(int id, Status status, string Name)
    {
        var token1 = _accountManager.UpdateStatus(id, status);
        var token2 = _accountManager.UpdateName(id, name);

        await token2;
        await token1;       
    }
}

我希望上下文上的多个异步操作将得到支持。否则,如果每次都必须等待内联,那么为什么要使用异步呢?

EN

回答 1

Stack Overflow用户

发布于 2019-01-08 16:08:42

异步!=并行。异步所做的就是解除线程的阻塞,以便其他工作可以进行,例如满足其他请求。

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

https://stackoverflow.com/questions/54095537

复制
相关文章

相似问题

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