public override void Post(SendOrPostCallback d, object state) { SynchronizationContext.SetSynchronizationContext(this); d(state); if (!_loadCtx._isCompleting) { _loadCtx.CompleteAsync(); } }
/// <summary> /// Runs code within a new loader context before firing any pending loaders. /// </summary> public static async Task Run(Action <DataLoaderContext> action) { if (action == null) { throw new ArgumentNullException(nameof(action)); } var loadCtx = new DataLoaderContext(); var syncCtx = new DataLoaderSynchronizationContext(loadCtx); using (new DataLoaderContextSwitcher(loadCtx)) using (new SynchronizationContextSwitcher(syncCtx)) { action(loadCtx); await loadCtx.CompleteAsync().ConfigureAwait(false); } }
/// <summary> /// Runs code within a new loader context before firing any pending loaders. /// </summary> public static async Task Run(Func <DataLoaderContext, Task> func) { if (func == null) { throw new ArgumentNullException(nameof(func)); } var loadCtx = new DataLoaderContext(); var syncCtx = new DataLoaderSynchronizationContext(loadCtx); using (new DataLoaderContextSwitcher(loadCtx)) using (new SynchronizationContextSwitcher(syncCtx)) { var result = func(loadCtx); await loadCtx.CompleteAsync().ConfigureAwait(false); await result.ConfigureAwait(false); } }