コード例 #1
0
        public async Task AddCompletionCallback_ContinuationsRunOnCorrectSynchronozationContext()
        {
            // Arrange
            var op        = new AsyncCompletionSource();
            var op2       = new AsyncCompletionSource();
            var sc        = Substitute.For <SynchronizationContext>();
            var tid       = 0;
            var tidActual = 0;

            op.AddCompletionCallback(new Action(() => { }), sc);
            op2.AddCompletionCallback(new Action(() => tidActual = Thread.CurrentThread.ManagedThreadId), null);

            // Act
            await Task.Run(() => op.SetCompleted());

            await Task.Run(() => { tid = Thread.CurrentThread.ManagedThreadId; op2.SetCompleted(); });

            // Assert
            sc.Received(1).Post(Arg.Any <SendOrPostCallback>(), Arg.Any <object>());
            Assert.Equal(tid, tidActual);
        }