public void CaptureContextNoSyncContextTest()
        {
            var originalContext = SynchronizationContext.Current;
            var syncContext     = new CustomSyncContext();

            try
            {
                SynchronizationContext.SetSynchronizationContext(syncContext);
                var eContext = ExecutionContextHelper.CaptureContextNoSyncContextIfPossible();
                Assert.IsNotNull(eContext);

                AtomicBool isDefaulContext = new AtomicBool(false);
                var        task            = Task.Run(() =>
                {
                    SynchronizationContext.SetSynchronizationContext(null);
                    ExecutionContextHelper.RunInContext(eContext, (st) =>
                    {
                        isDefaulContext.Value = SynchronizationContext.Current == null;
                    }, null, true);
                });


                task.Wait();
                TimingAssert.IsTrue(10000, isDefaulContext, "Default context expected");
            }
            finally
            {
                SynchronizationContext.SetSynchronizationContext(originalContext);
            }
        }
示例#2
0
 private void RunCommon()
 {
     syncContext = new CustomSyncContext(this);
     SynchronizationContext.SetSynchronizationContext(syncContext);
     try
     {
         Loop();
         runDeferred.SetResult(true);
     }
     catch (Exception ex)
     {
         runDeferred.SetException(ex);
     }
     finally
     {
         if (runMode)
         {
             runTask = runDeferred.Task;
         }
         runDeferred = null;
     }
 }
示例#3
0
        public void RegisterWithoutECTest()
        {
            var originalContext = SynchronizationContext.Current;
            var syncContext     = new CustomSyncContext();

            try
            {
                CancellationTokenSource tokenSource = new CancellationTokenSource();
                CancellationToken       token       = tokenSource.Token;

                AtomicBool isNoExecutionContext = new AtomicBool(false);

                using (CancellationTokenHelper.RegisterWithoutECIfPossible(token, (st) =>
                {
                    isNoExecutionContext.Value = SynchronizationContext.Current == null;
                }, null))
                {
                    Barrier barrier  = new Barrier(2);
                    Barrier barrier2 = new Barrier(2);

                    Task.Run(() =>
                    {
                        barrier.SignalAndWait();
                        barrier2.SignalAndWait();
                        tokenSource.Cancel();
                    });

                    barrier.SignalAndWait();
                    SynchronizationContext.SetSynchronizationContext(syncContext);
                    barrier2.SignalAndWait();
                    TimingAssert.IsTrue(10000, isNoExecutionContext, "isNoExecutionContext");
                }
            }
            finally
            {
                SynchronizationContext.SetSynchronizationContext(originalContext);
            }
        }
示例#4
0
 /// <summary>
 /// Creates a new time model, optionally providing a starting time and increment
 /// </summary>
 /// <param name="increment">The amount of time to increment on each iteration, defaults to one 100 nanosecond tick</param>
 /// <param name="now">The starting time, defaults to zero</param>
 public Time(TimeSpan?increment = null, TimeSpan?now = null)
 {
     Increment   = increment.HasValue ? increment.Value : TimeSpan.FromTicks(1);
     Now         = now.HasValue ? now.Value : TimeSpan.Zero;
     syncContext = new CustomSyncContext(this);
 }