/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit.Abstractions/Middleware/OneTimeSetupMethod.cs
69 строк
1 KB
Chris Patterson
Fixed #4867 - Changed Configure Topology Filter One Time Setup to use entirely new approach
10 янв 2024, 23:49
10 янв 2024, 23:49
8aa9e1c
Код
Авторство
О чём код?
namespace MassTransit; using System; using System.Threading.Tasks; using Internals; class OneTimeSetupMethod { readonly OneTimeSetupCallback _callback; readonly TaskCompletionSource<bool> _value; public OneTimeSetupMethod(OneTimeSetupCallback callback) { _callback = callback; _value = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously); } public Task<bool> Value => _value.Task; public Task SetupPayload() { try { var task = _callback(); if (task.Status == TaskStatus.RanToCompletion) { _value.TrySetResult(true); return Task.CompletedTask; } async Task SetupAsync() { try { await task.ConfigureAwait(false); _value.TrySetResult(true); } catch (Exception exception) { _value.TrySetException(exception); throw; } } return SetupAsync(); } catch (Exception exception) { _value.TrySetException(exception); throw; } } public void SetPayload(Task<bool> value) { _value.TrySetFromTask(value); } } public interface OneTimeContext { void Evict(); }