将异步等待与 EF Core 存储库模式结合使用

问题描述 投票:0回答:1

在我正在做的一个项目中,在一些存储库中,数据层没有使用async/await。我相信这可能会导致性能问题,因为我相信它被遗漏了。

public Task<List<Role>> GetRolesByClaimValue(Guid tenantId, string claimType, CancellationToken cancellationToken = default)
{
    return _dbContext.GLSRoleClaims
                     .Include(t => t.Role)
                     .Where(t => (t.TenantId == null || t.TenantId == tenantId) && t.ClaimType == claimType)
                     .Select(t => t.Role!)
                     .ToListAsync(cancellationToken);
}

另一个仓库:

public Task<bool> IsInvited(Guid tenantId, Guid userId, CancellationToken cancellationToken = default) => _dbContext.TenantInvitations.AnyAsync(t => t.UserId == userId && t.TenantId == tenantId, cancellationToken: cancellationToken);

不添加可以吗?当我在互联网上搜索并阅读“异步省略”或“异步传递”时,它有时在性能方面很有用。

我很困惑何时使用它,何时不使用它。

我想知道什么时候我们不应该使用 async/await

c# entity-framework-core ef-code-first
1个回答
0
投票

await
调用
async
函数只是意味着您不希望调用函数继续其工作,直到等待的函数返回为止。当您想要使用异步函数的结果或想要在继续之前报告成功时,您可以这样做。这种行为在数据获取代码中是典型的。但是,在某些情况下您并不关心异步函数的作用。例如,您可能有一个定期触发的 main 函数 发送电子邮件的异步函数。在这种情况下,调用函数不再关心异步函数。电子邮件发送功能可能有自己的报告失败的方法,例如登录文件或数据库。

简而言之,并非所有

async
功能都必须被
await
编辑。无论如何,决定是否等待与性能没有太大关系。

© www.soinside.com 2019 - 2024. All rights reserved.