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;
}
}