Example #1
0
        public static T RunAsync <T>(Func <Task <T> > asyncMethod)
        {
            if (asyncMethod == null)
            {
                throw new ArgumentNullException("asyncMethod");
            }

            var prevCtx = SynchronizationContext.Current;

            try
            {
                var syncCtx = new UnitySynchronizationContext(false);
                SynchronizationContext.SetSynchronizationContext(syncCtx);

                var t = asyncMethod();
                if (t == null)
                {
                    throw new InvalidOperationException("No task provided.");
                }
                t.ContinueWith(delegate { syncCtx.Complete(); }, TaskScheduler.Default);

                syncCtx.RunOnCurrentThread();
                return(t.GetAwaiter().GetResult());
            }
            finally { SynchronizationContext.SetSynchronizationContext(prevCtx); }
        }