using System.Threading.Tasks; namespace ComposableAsync { /// /// implementation based on single /// public sealed class MonoDispatcherManager : IDispatcherManager { /// public bool DisposeDispatcher { get; } /// public IDispatcher GetDispatcher() => _Dispatcher; private readonly IDispatcher _Dispatcher; /// /// Create /// /// /// public MonoDispatcherManager(IDispatcher dispatcher, bool shouldDispose = false) { _Dispatcher = dispatcher; DisposeDispatcher = shouldDispose; } /// public Task DisposeAsync() { return DisposeDispatcher && (_Dispatcher is IAsyncDisposable disposable) ? disposable.DisposeAsync() : Task.CompletedTask; } } }