Exemple #1
0
 public void TargetsCurrentSynchronizationContext()
 {
     RunWithoutSyncCtx(() =>
     {
         var tsc = new TrackingSynchronizationContext();
         SynchronizationContext.SetSynchronizationContext(tsc);
         Progress<int> p = new Progress<int>(i => { });
         for (int i = 0; i < 3; i++)
             ((IProgress<int>)p).Report(i);
         Assert.Equal(3, tsc.Posts);
         SynchronizationContext.SetSynchronizationContext(null);
     });
 }
Exemple #2
0
 public void NoWorkQueuedIfNoHandlers()
 {
     RunWithoutSyncCtx(() =>
     {
         var tsc = new TrackingSynchronizationContext();
         SynchronizationContext.SetSynchronizationContext(tsc);
         Progress<int> p = new Progress<int>();
         for (int i = 0; i < 3; i++)
             ((IProgress<int>)p).Report(i);
         Assert.Equal(0, tsc.Posts);
         SynchronizationContext.SetSynchronizationContext(null);
     });
 }
        public static void SynchronizationContextCurrent_NotUsedForAsyncOperations()
        {
            Task.Run(() =>
            {
                var sc = new TrackingSynchronizationContext();
                SynchronizationContext.SetSynchronizationContext(sc);

                using (XmlReader reader = XmlReader.Create(new DribbleReadXmlAsyncStream(_dummyXml), new XmlReaderSettings {
                    Async = true,
                }))
                {
                    while (reader.ReadAsync().GetAwaiter().GetResult())
                    {
                        ;
                    }
                }

                Assert.True(sc.CallStacks.Count == 0, "Sync Ctx used: " + string.Join(Environment.NewLine + Environment.NewLine, sc.CallStacks));
            }).GetAwaiter().GetResult();
        }
Exemple #4
0
 public async Task ConfiguredAwaiter_ContinuesOnCapturedContext(bool continueOnCapturedContext)
 {
     await Task.Run(() =>
     {
         var tsc = new TrackingSynchronizationContext();
         SynchronizationContext.SetSynchronizationContext(tsc);
         try
         {
             ValueTask <int> t = new ValueTask <int>(42);
             var mres          = new ManualResetEventSlim();
             t.ConfigureAwait(continueOnCapturedContext).GetAwaiter().OnCompleted(() => mres.Set());
             Assert.True(mres.Wait(10000));
             Assert.Equal(continueOnCapturedContext ? 1 : 0, tsc.Posts);
         }
         finally
         {
             SynchronizationContext.SetSynchronizationContext(null);
         }
     });
 }
Exemple #5
0
 public async Task ConfiguredAwaiter_ContinuesOnCapturedContext(bool continueOnCapturedContext)
 {
     await Task.Run(() =>
     {
         var tsc = new TrackingSynchronizationContext();
         SynchronizationContext.SetSynchronizationContext(tsc);
         try
         {
             ValueTask<int> t = 42;
             var mres = new ManualResetEventSlim();
             t.ConfigureAwait(continueOnCapturedContext).GetAwaiter().OnCompleted(() => mres.Set());
             Assert.True(mres.Wait(10000));
             Assert.Equal(continueOnCapturedContext ? 1 : 0, tsc.Posts);
         }
         finally
         {
             SynchronizationContext.SetSynchronizationContext(null);
         }
     });
 }