Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Post #6094
3.62K

🧑💻 Как отменить асинхронную операцию с помощью CancellationToken
Одной из ключевых особенностей асинхронного программирования в C# является возможность отменить долгие или зависшие операции, используя
Для создания токена отмены используется объект типа
Пример отмены с помощью токена. Вызываем функцию и передаём в неё токен:
Сама функция:
При отмене операции метод выбрасывает исключение
🐸Библиотека шарписта #буст
Одной из ключевых особенностей асинхронного программирования в C# является возможность отменить долгие или зависшие операции, используя
CancellationToken. CancellationToken — это объект, который передается в метод асинхронной операции. Он позволяет сигнализировать об отмене операции, если она больше не требуется. Для создания токена отмены используется объект типа
CancellationTokenSource, который предоставляет токен для отмены, а также метод Cancel(), который сигнализирует об отмене.Пример отмены с помощью токена. Вызываем функцию и передаём в неё токен:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Создаем объект CancellationTokenSource
var cancellationTokenSource = new CancellationTokenSource();
// Получаем токен отмены
var cancellationToken = cancellationTokenSource.Token;
// Запускаем асинхронную задачу
var task = LongRunningOperation(cancellationToken);
// Через 3 секунды отменяем операцию
await Task.Delay(3000);
cancellationTokenSource.Cancel();
try
{
// Ожидаем завершения операции
await task;
}
catch (OperationCanceledException)
{
Console.WriteLine("Операция была отменена.");
}
}
}
Сама функция:
// Асинхронная операция, которая может быть отменена
static async Task LongRunningOperation(CancellationToken cancellationToken)
{
Console.WriteLine("Операция началась.");
for (int i = 0; i < 10; i++)
{
// Проверка на отмену операции
if (cancellationToken.IsCancellationRequested)
{
Console.WriteLine("Операция отменена.");
throw new OperationCanceledException();
}
// Имитация работы
Console.WriteLine($"Шаг {i + 1}...");
await Task.Delay(1000); // Задержка в 1 секунду
}
Console.WriteLine("Операция завершена.");
}
}
При отмене операции метод выбрасывает исключение
OperationCanceledException, которое можно ловить и обрабатывать соответствующим образом. 🐸Библиотека шарписта #буст
- 👍 9
- ❤ 8
- 😁 3
- 🥱 1















