public void DoAction20Times_ProvidedAction_Executed20TimesInParallel() { // ARRANGE int ExpectedResult = 20; int invocationCount = 0; var mutex = new object(); Action action = () => { System.Diagnostics.Debug.WriteLine( string.Format( "Executes action in Task '{0}' executed on Thread '{1}'", Task.CurrentId, Thread.CurrentThread.ManagedThreadId)); lock (mutex) { ++invocationCount; } }; // ACT ParallelInvocation.DoAction20Times(action); // ASSERT Assert.AreEqual(ExpectedResult, invocationCount, "result has unexpected value."); }
public void ProcessArrayInParallel_ProvidedValues_ExecutesPartialProcessingInParallel() { // ARRANGE int ExpectedResult = 2; var array = new double[] { 4.45, 2.11, 5.34, 6.56 }; // ACT var result = ParallelInvocation.ProcessArrayInParallel(array); // ASSERT Assert.AreEqual(ExpectedResult, result, "result has unexpected value."); }
public void DoAction20TimesWithCancellation_Cancelled_ThrowsOperationCanceledException() { // ARRANGE Exception exception = null; CancellationTokenSource cts = new CancellationTokenSource(); Action action = () => { System.Diagnostics.Debug.WriteLine( string.Format( "Executes action in Task '{0}' executed on Thread '{1}'", Task.CurrentId, Thread.CurrentThread.ManagedThreadId)); Thread.Sleep(500); }; Task.Run(() => { Thread.Sleep(600); cts.Cancel(); }); // ACT try { ParallelInvocation.DoAction20TimesWithCancellation(action, cts.Token); } catch (Exception e) { exception = e; } // ASSERT Assert.NotNull(exception, "exception is null."); Assert.IsInstanceOf <OperationCanceledException>(exception, "exception has unexpected type."); }