/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Middleware/Outbox/BusOutboxNotification.cs
50 строк
2 KB
denys.kozhevnikov
Few tweaks for task delay
06 мар 2023, 18:33
06 мар 2023, 18:33
9324850
Код
Авторство
О чём код?
namespace MassTransit.Middleware.Outbox { using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Options; public class BusOutboxNotification : IBusOutboxNotification { readonly object _lock = new object(); readonly IOptions<OutboxDeliveryServiceOptions> _options; CancellationTokenSource _cancellationTokenSource; public BusOutboxNotification(IOptions<OutboxDeliveryServiceOptions> options) { _options = options; } public async Task WaitForDelivery(CancellationToken cancellationToken) { lock (_lock) _cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); try { var delay = await Task.Delay(_options.Value.QueryDelay, _cancellationTokenSource.Token) .ContinueWith(t => t, CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default) .ConfigureAwait(false); if (delay.IsCanceled) cancellationToken.ThrowIfCancellationRequested(); } finally { lock (_lock) { _cancellationTokenSource.Dispose(); _cancellationTokenSource = null; } } } public void Delivered() { lock (_lock) _cancellationTokenSource?.Cancel(); } } }