Точно как говорится в заголовке. Интересно, я пишу асинхронный вызов и жду, когда он не понадобится.Когда асинхронно и ждут в C#?
Я видел такие методы, как это с асинхронным тегом
public async Task CreateAsync(User user)
{
if (_context.Entry<User>(user).State == EntityState.Detached)
{
_context.Set<User>().Add(user);
}
_context.Entry<User>(user).State = EntityState.Added;
await _context.SaveChangesAsync();
}
и как это без него
public Task CreateAsync(User user)
{
if (_context.Entry<User>(user).State == EntityState.Detached)
{
_context.Set<User>().Add(user);
}
_context.Entry<User>(user).State = EntityState.Added;
return _context.SaveChangesAsync();
}
И компилироваться. Я всегда добавляю async и жду ключевых слов и удивляюсь, может быть, если я делаю это неправильно и пишу их, когда они не нужны?
EDIT:
Если вы на самом деле возвращает значение, это должно быть записано с помощью асинхр/ждут ключевых слов, или без него. Вот версия с ключевыми словами
public async Task<User> CreateAsync(User user)
{
if (_context.Entry<User>(user).State == EntityState.Detached)
{
_context.Set<User>().Add(user);
}
_context.Entry<User>(user).State = EntityState.Added;
await _context.SaveChangesAsync();
return user;
}
здесь еще один пример
public Task<User> FindByIdAsync(long userId)
{
return _context.Users.FindAsync(userId);
}
public async Task<User> FindByIdAsync(long userId)
{
return await _context.Users.FindAsync(userId);
}
EDIT 2
Отличных ответов до сих пор, но один последний примером. Поскольку у меня есть мои асинхронные вызовы, как бы я справился с вызовом нескольких асинхронных функций из 1 метода. вот пример того, что у меня есть, но я не знаю, правильно ли это. Я не хочу, чтобы метод завершил работу до тех пор, пока все методы AddAsync не будут завершены. Правильно ли это
private async Task AddPermissions(DataContext context)
{
var permissionService = new PermissionService(context);
await permissionService.AddAsync(new Permission("CanView", "View company"));
await permissionService.AddAsync(new Permission("CanAdd", "Add and view company"));
await permissionService.AddAsync(new Permission("CanEdit", "Edit and view company"));
await permissionService.AddAsync(new Permission("CanDelete", "Delete and view company record"));
await permissionService.AddAsync(new Permission("CanAdd", "Add new pages"));
await permissionService.AddAsync(new Permission("CanEdite", "Edit existing pages"));
await permissionService.AddAsync(new Permission("CanDelete", "Delete a page"));
await permissionService.AddAsync(new Permission("CanAdd", "Add new page content"));
await permissionService.AddAsync(new Permission("CanEdit", "Edit existing page content"));
await permissionService.AddAsync(new Permission("CanDelete", "Delete page content"));
}
возможно дубликат [Async и ОЖИДАНИЕ] (http://stackoverflow.com/questions/14455293/async-and-await) –