Пример #1
0
        public void UseContextWorks()
        {
            var defaultTaskScheduler = TaskScheduler.Default;
            var v  = 0;
            var ts = new ThreadLocal <int>(() => v++);

            EventLoop.Run(() =>
            {
                var sc   = SynchronizationContext.Current;
                var done = false;

                var threadId     = -1;
                var realThreadId = -1;
                var disp         = DisposableEx.Action(() => threadId = ts.Value).UseContext(sc);
                Task.Factory.StartNew(() =>
                {
                    realThreadId = ts.Value;
                    disp.Dispose();
                    done = true;
                }, CancellationToken.None, TaskCreationOptions.None, defaultTaskScheduler);

                while (!done)
                {
                    EventLoop.DoEvents();
                }
                Assert.Equal(ts.Value, threadId);
                Assert.NotEqual(realThreadId, threadId);
            });
        }