Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Для чего нужен await?
await — это ключевое слово для работы с асинхронными операциями. Оно выполняет две основные функции:
1. Распаковывает результат из Task
Без await получаешь Task, с await — реальный результат:
Task<User> task = _service.GetUserAsync(1);
User user = await _service.GetUserAsync(1);
2. Освобождает поток при ожидании
Это главное преимущество. При await поток не занят операцией:
public async Task<string> FetchGood()
{
var data = await httpClient.GetStringAsync("https://api.example.com");
return data;
}
public async Task<string> FetchBad()
{
var data = httpClient.GetStringAsync("https://api.example.com").Result;
return data;
}
Во втором случае поток БЛОКИРОВАН всё время, пока ждёт ответа.
Практический пример
[ApiController]
public class UserController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> CreateUserAsync(CreateUserRequest request)
{
var user = await _userService.CreateUserAsync(request);
await _emailService.SendWelcomeEmailAsync(user.Email);
return Ok(user);
}
}
Каждый await освобождает поток. В то время как один HTTP-запрос ждёт сохранения в БД, сервер может обработать сотни других запросов этим же потоком.
Параллельное выполнение
var user = await _userService.GetAsync(1);
var posts = await _postService.GetAsync(1);
var tasks = new[]
{
_userService.GetAsync(1),
_postService.GetAsync(1)
};
await Task.WhenAll(tasks);
Второй подход быстрее: операции выполняются параллельно, а не последовательно.
Обязательные правила
- await работает только в async методах
- async метод должен возвращать Task или Task<T>
- Никогда не используй .Result или .Wait()
Итого
await позволяет:
- Получить результат из Task без блокировки
- Писать асинхронный код как синхронный
- Одному потоку обрабатывать тысячи операций одновременно