Многие методы в .NET принимают
CancellationToken как параметр. Это правильная практика: метод должен уметь реагировать на отмену. Но что делать, если в конкретном месте отмена просто не нужна?Что такое CancellationToken.None
CancellationToken.None — это пустой токен. Его свойство CanBeCanceled всегда возвращает false. Отменить его невозможно, и никакие CancellationTokenSource к нему не привязаны.Используется там, где токен нужно передать по сигнатуре, но реальной логики отмены нет:
await DoWorkAsync(CancellationToken.None);
Альтернатива через default
В C# есть эквивалентный способ:
await DoWorkAsync(default);
// или явно
await DoWorkAsync(default(CancellationToken));
default(CancellationToken) и CancellationToken.None равны между собой. Два пустых токена всегда равны, вне зависимости от того, как они созданы.Когда применять
Типичный сценарий: вызов метода в
Main, в тестах или в коде инициализации, где нет смысла настраивать отмену, но метод её принимает.// Тест без отмены
var result = await repository.GetAllAsync(CancellationToken.None);
// Инициализация при старте приложения
await migrationService.RunAsync(CancellationToken.None);
Что не стоит делать
Передавать
new CancellationToken() вместо CancellationToken.None. Технически результат тот же, но это создаёт ложное ощущение, что токен где-то настроен. CancellationToken.None читается однозначно: отмены здесь нет намеренно.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
