/// <summary> /// Does a parallel ForEach around a blocking method /// </summary> /// <remarks>Since the method is blocking (even though it returns a task) the Console.WriteLine won't /// be executed till all calls have been completed in parallel</remarks> private static Task ParallelForEachSleepLoopTests() { var sw = BeginExample("ParallelForEachSleepLoopTests starting..."); var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var sut = new BlockingMethod(); Parallel.ForEach(array, (i, state) => sut.StartIteration(i, DelayDurationOne, "ParallelForEachSleepLoopTests")); sw.Stop(); Console.WriteLine($"Duration of Parallel.ForEach sleep iteration loop for {array.Length} iterations sleep for {DelayDurationOne} ms was {sw.ElapsedMilliseconds} ms"); return(Task.CompletedTask); }
/// <summary> /// Loops around a blocking method trying to do it asynchronously (but it's blocking so it can't) /// with no parallelism /// </summary> private static async Task SleepLoopTests() { var sw = BeginExample("SleepLoopTests starting..."); var sut = new BlockingMethod(); for (var i = 0; i < IterationCount; i++) { await sut.StartIteration(i, DelayDurationOne, "One"); } sw.Stop(); Console.WriteLine($"Duration of async sleep iteration loop for {IterationCount} iterations sleeping for {DelayDurationOne} ms was {sw.ElapsedMilliseconds} ms"); }