【发布时间】:2015-03-24 19:10:56
【问题描述】:
我试图了解何时使用等待/异步。 在网上阅读了几篇文章后,我开始分析 Asp.Net Identity 源代码。这是 RoleStore.cs 的有趣片段
/// <summary>
/// Find a role by name
/// </summary>
/// <param name="roleName"></param>
/// <returns></returns>
public Task<TRole> FindByNameAsync(string roleName)
{
ThrowIfDisposed();
return _roleStore.EntitySet.FirstOrDefaultAsync(u => u.Name.ToUpper() == roleName.ToUpper());
}
/// <summary>
/// Insert an entity
/// </summary>
/// <param name="role"></param>
public virtual async Task CreateAsync(TRole role)
{
ThrowIfDisposed();
if (role == null)
{
throw new ArgumentNullException("role");
}
_roleStore.Create(role);
await Context.SaveChangesAsync().WithCurrentCulture();
}
我的问题是:
为什么FindByNameAsync 没有async 关键字而CreateAsync 有?
我们可以这样写
public async Task<TRole> FindByNameAsync(string roleName)
{
ThrowIfDisposed();
return await _roleStore.EntitySet.FirstOrDefaultAsync(u => u.Name.ToUpper() == roleName.ToUpper());
}
这将编译。我认为这是不正确的,但我不知道为什么。
【问题讨论】:
-
因为
FindByNameAsync没有await而CreateAsync有任何作用。
标签: c# asp.net entity-framework asynchronous