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;
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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); }
        }