Как я могу обработать отмену асинхронной задачи, когда я вызываю ее из условия while?

#async-await #cancellationtokensource

#асинхронное ожидание #cancellationtokensource

Вопрос:

У меня есть такой цикл внутри блока try-catch:

 try
{
    while ((receivedBytesCount = await tcpClient.GetStream().ReadAsync(rxBytes, 0, rxBytes.Length, tcpCancellationSource.Token)) != 0)
    {
        // handling rxBytes[]
    }
}
catch (OperationCanceledException oce)
{
    Console.WriteLine($"Shutting down TCP thread...");
}
catch (Exception e)
{
    // handle other exceptions
}
  

Когда я запрашиваю отмену tcpCancellationSource откуда-то:

 tcpCancellationSource.Cancel();
  

мое приложение выдает исключение OperationCanceledException, но не из блока try-catch .

Как я должен правильно обработать эту отмену?

Комментарии:

1. Вы хотите сказать, что ваш catch (OperationCanceledException oce) не попадает под удар?

2. @JohanP Да. Он не попадает.

3. Возможно, вы используете tcpCancellationSource какой-то другой асинхронный код, который выдает исключение?

4. @JohanP Возможно, это так, но я изменил слишком много вещей, и теперь я не знаю, что помогло.