using System; using System.Threading; using System.Threading.Tasks; namespace ComposableAsync { /// /// that run actions synchronously /// public sealed class NullDispatcher: IDispatcher { private NullDispatcher() { } /// /// Returns a static null dispatcher /// public static IDispatcher Instance { get; } = new NullDispatcher(); /// public void Dispatch(Action action) { action(); } /// public Task Enqueue(Action action) { action(); return Task.CompletedTask; } /// public Task Enqueue(Func action) { return Task.FromResult(action()); } /// public async Task Enqueue(Func action) { await action(); } /// public async Task Enqueue(Func> action) { return await action(); } public Task Enqueue(Func action, CancellationToken cancellationToken) { return Task.FromResult(action()); } public Task Enqueue(Action action, CancellationToken cancellationToken) { action(); return Task.CompletedTask; } public async Task Enqueue(Func action, CancellationToken cancellationToken) { await action(); } public async Task Enqueue(Func> action, CancellationToken cancellationToken) { return await action(); } /// public IDispatcher Clone() => Instance; } }