Middle+
36
Как корректно реализовать отмену бронирования при параллельном выполнении задач через Task.WhenAll?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
При параллельном выполнении задач через Task.WhenAll для корректной отмены бронирования нужно использовать CancellationToken. Он позволяет координировать отмену всех задач.
Пример:
public async Task CancelBookingsAsync(List<Booking> bookings, CancellationToken cancellationToken)
{
var tasks = bookings.Select(async booking =>
{
cancellationToken.ThrowIfCancellationRequested();
await CancelBookingAsync(booking, cancellationToken);
});
try
{
await Task.WhenAll(tasks);
}
catch (OperationCanceledException)
{
// Логика обработки отмены
Console.WriteLine("Отмена операций бронирования выполнена.");
}
}
public async Task CancelBookingAsync(Booking booking, CancellationToken cancellationToken)
{
// Имитация отмены бронирования
await Task.Delay(1000, cancellationToken);
Console.WriteLine($"Бронирование {booking.Id} отменено");
}
Ключевые моменты:
- Передайте один и тот же
CancellationTokenво все задачи. - Внутри каждой задачи проверяйте
cancellationToken.ThrowIfCancellationRequested()для своевременной отмены. - При необходимости вызовите
CancellationTokenSource.Cancel()для запуска отмены.
Такой подход гарантирует, что при отмене одна задача прервет выполнение, и остальные задачи тоже смогут корректно завершиться.