コード例 #1
0
        public void ShouldReceiveDelegateOnDifferentThreadIfThreadAffinity()
        {
            int calledThreadId = -1;
            string calledThreadName = string.Empty;
            ManualResetEvent completeEvent = new ManualResetEvent(false);
            Action<object> action = delegate
            {
                calledThreadId = Thread.CurrentThread.ManagedThreadId;
                calledThreadName = Thread.CurrentThread.Name;
                completeEvent.Set();
            };

            IDelegateReference actionDelegateReference = new MockDelegateReference() { Target = action };
            IDelegateReference filterDelegateReference = new MockDelegateReference() { Target = (Predicate<object>)delegate { return true; } };
            SynchronizationContextMock mockSyncContext = new SynchronizationContextMock();
            var eventSubscription = new CompositeEventSubscription<object>(actionDelegateReference, filterDelegateReference, mockSyncContext);

            var publishAction = eventSubscription.GetExecutionStrategy();

            Assert.IsNotNull(publishAction);

            publishAction.Invoke(null);

            completeEvent.WaitOne(5000, false);
            Assert.AreNotEqual(Thread.CurrentThread.ManagedThreadId, calledThreadId);
            Assert.AreEqual("SynchronizationContextMockThread", calledThreadName);
        }
コード例 #2
0
            internal WorkerThread(string name, SynchronizationContextMock context)
            {
                m_Context = context;

                m_EndLoop = false;

                m_ThreadObj = new Thread(Run);
                m_ThreadObj.IsBackground = true;
                m_ThreadObj.Name = name;
                m_ThreadObj.Start();
            }