public void DontDisposeCallerState() { STPStartInfo stpStartInfo = new STPStartInfo { DisposeOfStateObjects = false }; STP smartThreadPool = new STP(stpStartInfo); CallerState nonDisposableCallerState = new NonDisposableCallerState(); CallerState disposableCallerState = new DisposableCallerState(); IWorkItemResult wir1 = smartThreadPool.QueueWorkItem( new WorkItemCallback(this.DoSomeWork), nonDisposableCallerState); IWorkItemResult wir2 = smartThreadPool.QueueWorkItem( new WorkItemCallback(this.DoSomeWork), disposableCallerState); wir1.GetResult(); bool success = (1 == nonDisposableCallerState.Value); wir2.GetResult(); success = success && (1 == disposableCallerState.Value); smartThreadPool.Shutdown(); Assert.IsTrue(success); }
public void DisposeCallerState() { STPStartInfo stpStartInfo = new STPStartInfo { DisposeOfStateObjects = true }; STP smartThreadPool = new STP(stpStartInfo); CallerState nonDisposableCallerState = new NonDisposableCallerState(); CallerState disposableCallerState = new DisposableCallerState(); IWorkItemResult wir1 = smartThreadPool.QueueWorkItem( new WorkItemCallback(this.DoSomeWork), nonDisposableCallerState); IWorkItemResult wir2 = smartThreadPool.QueueWorkItem( new WorkItemCallback(this.DoSomeWork), disposableCallerState); wir1.GetResult(); Assert.AreEqual(1, nonDisposableCallerState.Value); wir2.GetResult(); // Wait a little bit for the working thread to call dispose on the // work item's state. smartThreadPool.WaitForIdle(); Assert.AreEqual(2, disposableCallerState.Value); smartThreadPool.Shutdown(); }
public void TimeoutInProgressWorkItemSoftWithAbortOnWorkItemCancel() { bool abortFailed = false; ManualResetEvent waitToStart = new ManualResetEvent(false); ManualResetEvent waitToComplete = new ManualResetEvent(false); STP stp = new STP(); IWorkItemResult wir = stp.QueueWorkItem( new WorkItemInfo() { Timeout = 500 }, state => { waitToStart.Set(); Thread.Sleep(1000); STP.AbortOnWorkItemCancel(); abortFailed = true; return(null); }); waitToStart.WaitOne(); stp.WaitForIdle(); Assert.IsTrue(wir.IsCanceled); Assert.IsFalse(abortFailed); stp.Shutdown(); }
private void CheckSinglePriority(ThreadPriority threadPriority) { STPStartInfo stpStartInfo = new STPStartInfo { ThreadPriority = threadPriority }; STP stp = new STP(stpStartInfo); IWorkItemResult wir = stp.QueueWorkItem(new WorkItemCallback(GetThreadPriority)); ThreadPriority currentThreadPriority = (ThreadPriority)wir.GetResult(); Assert.AreEqual(threadPriority, currentThreadPriority); }