DotNext by Roman Sakno

<PackageReference Include="DotNext" Version="1.1.0" />

 CustomDelegateFuture<D>

using System; using System.Threading; namespace DotNext.Runtime.CompilerServices { internal sealed class CustomDelegateFuture<D> : AsyncDelegateFuture<D> where D : MulticastDelegate { private readonly Action<D> invoker; internal CustomDelegateFuture(Action<D> invoker, CancellationToken token) : base(token) { this.invoker = invoker; } private protected override void InvokeOne(D d) { invoker(d); } } }