Я пытаюсь понять, когда использовать await/async. После прочтения нескольких статей в Интернете я начал анализировать исходный код Asp.Net Identity. Вот интересный фрагмент RoleStore.csПочему некоторые методы async имеют async, а другие не
/// <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
не имеет асинхронной ключевое слово в то время как CreateAsync
есть?
Мы могли бы написать, как этот
public async Task<TRole> FindByNameAsync(string roleName)
{
ThrowIfDisposed();
return await _roleStore.EntitySet.FirstOrDefaultAsync(u => u.Name.ToUpper() == roleName.ToUpper());
}
и это будет скомпилировать. Я предполагаю, что это неверно, но я не знаю почему.
Потому что 'FindByNameAsync' ничего не ждет, пока работает 'CreateAsync'. –