using System; using System.Runtime.CompilerServices; using System.Security; namespace ComposableAsync { /// /// Dispatcher awaiter, making a dispatcher awaitable /// public struct DispatcherAwaiter : INotifyCompletion { /// /// Dispatcher never is synchronous /// public bool IsCompleted => false; private readonly IDispatcher _Dispatcher; /// /// Construct a NotifyCompletion fom a dispatcher /// /// public DispatcherAwaiter(IDispatcher dispatcher) { _Dispatcher = dispatcher; } /// /// Dispatch on complete /// /// [SecuritySafeCritical] public void OnCompleted(Action continuation) { _Dispatcher.Dispatch(continuation); } /// /// No Result /// public void GetResult() { } } }