コード例 #1
0
        public void DoWork_TokenCanceled_WorkNeverCompleted()
        {
            CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
            TaskThreadManager uut = new TaskThreadManager(10, cancellationTokenSource);

            int count = 0;
            uut.DoWork(() => { System.Threading.Thread.Sleep(50); Interlocked.Increment(ref count); });
            uut.DoWork(() => { System.Threading.Thread.Sleep(50); Interlocked.Increment(ref count); });
            uut.DoWork(() => { System.Threading.Thread.Sleep(50); Interlocked.Increment(ref count); });
            uut.DoWork(() => { System.Threading.Thread.Sleep(50); Interlocked.Increment(ref count); });
            uut.DoWork(() => { System.Threading.Thread.Sleep(50); Interlocked.Increment(ref count); });

            cancellationTokenSource.Cancel();

            System.Threading.Thread.Sleep(250);
            Assert.IsTrue(count < 5);
        }