/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Courier/FactoryMethodExecuteActivityFactory.cs
50 строк
2 KB
Chris Patterson
Added IRoutingSlipBuilder, which is now registered in the container, so that a routing slip can be built and executed from the Abstractions assembly only.
18 фев 2022, 00:54
18 фев 2022, 00:54
e2d61b6
Код
Авторство
О чём код?
namespace MassTransit.Courier { using System; using System.Threading.Tasks; public class FactoryMethodExecuteActivityFactory<TActivity, TArguments> : IExecuteActivityFactory<TActivity, TArguments> where TActivity : class, IExecuteActivity<TArguments> where TArguments : class { readonly Func<TArguments, TActivity> _executeFactory; public FactoryMethodExecuteActivityFactory(Func<TArguments, TActivity> executeFactory) { _executeFactory = executeFactory; } public async Task Execute(ExecuteContext<TArguments> context, IPipe<ExecuteActivityContext<TActivity, TArguments>> next) { TActivity activity = null; try { activity = _executeFactory(context.Arguments); ExecuteActivityContext<TActivity, TArguments> activityContext = context.CreateActivityContext(activity); await next.Send(activityContext).ConfigureAwait(false); } finally { switch (activity) { // ReSharper disable once SuspiciousTypeConversion.Global case IAsyncDisposable asyncDisposable: await asyncDisposable.DisposeAsync().ConfigureAwait(false); break; case IDisposable disposable: disposable.Dispose(); break; } } } public void Probe(ProbeContext context) { context.CreateScope("factoryMethod"); } } }