private static ThreadSynchronizationContext BeginContext(Guid id, bool asRoot) { var context = new ThreadSynchronizationContext { OldContext = Current, Id = new Guid(id.ToString()), IsSyncRoot = asRoot }; SetSynchronizationContext(context); return context; }
private static ThreadSynchronizationContext BeginContext(Guid id, bool asRoot) { var context = new ThreadSynchronizationContext { OldContext = Current, Id = new Guid(id.ToString()), IsSyncRoot = asRoot }; SetSynchronizationContext(context); return(context); }
/// <summary> /// Shedules a task to run on the current thread. Use in console apps powershell and other async-> sync scenarios /// </summary> /// <param name="func"></param> public static void Run(Func <Task> func) { var prevCtx = SynchronizationContext.Current; try { var syncCtx = ThreadSynchronizationContext.CreateBlockingContext(); SynchronizationContext.SetSynchronizationContext(syncCtx); var t = func(); t.ContinueWith(delegate { syncCtx.Complete(); }, TaskScheduler.Default); syncCtx.RunOnCurrentThread(); t.GetAwaiter().GetResult(); } finally { SynchronizationContext.SetSynchronizationContext(prevCtx); } }