Что происходит на стороне API при отмене HTTP-запроса?

«Что происходит на стороне API при отмене HTTP-запроса?» — вопрос из категории Сети, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При отмене запроса клиентом (например, закрытием браузера или вызовом Abort()), сервер получает сигнал о разрыве соединения. Однако, фактическая обработка запроса на сервере зависит от реализации.

В ASP.NET Core с использованием CancellationToken:

  1. Фреймворк передает токен отмены, связанный с разрывом соединения клиентом, в метод контроллера.
  2. Если ваш код проверяет этот токен (cancellationToken.IsCancellationRequested) и корректно передает его в асинхронные операции, обработка может быть прервана.
  3. Если проверки нет, серверный код выполнится до конца, но попытка отправить ответ завершится ошибкой, так как канал связи уже закрыт.

Пример корректной обработки:

[HttpGet]
public async Task<IActionResult> GetData(CancellationToken cancellationToken)
{
    // Токен передается вниз по стеку вызовов
    var data = await _databaseService.FetchDataAsync(cancellationToken);
    return Ok(data);
}

Лучшие практики:

  • Всегда принимайте и передавайте CancellationToken в асинхронные методы.
  • В длительных операциях периодически проверяйте cancellationToken.ThrowIfCancellationRequested().
  • Используйте try-catch для обработки OperationCanceledException и корректного освобождения ресурсов (закрытие файлов, откат транзакций).