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); }); }