private static void RunInSerial() { for (int i = 0; i < Stocks.Count; i++) { Console.WriteLine("Serial processing stock: {0}", Stocks[i].Company); StockService.CallService(Stocks[i]); Console.WriteLine(); } }
private static void RunInParallel() { Parallel.For(0, Stocks.Count, i => { Console.WriteLine("Parallel processing stock: {0}", Stocks[i].Company); StockService.CallService(Stocks[i]); Console.WriteLine(); }); }
static void Main(string[] args) { double serialSeconds = 0; double parallelSeconds = 0; Stopwatch sw = new Stopwatch(); PopulateStockList(); sw = Stopwatch.StartNew(); RunInSerial(); serialSeconds = sw.Elapsed.TotalSeconds; sw = Stopwatch.StartNew(); RunInParallel(); parallelSeconds = sw.Elapsed.TotalSeconds; Console.WriteLine( "Finished serial at {0} and took {1}", DateTime.Now, serialSeconds); Console.WriteLine( "Finished parallel at {0} and took {1}", DateTime.Now, parallelSeconds); Console.ReadLine(); //Parallel options ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 2 }; Parallel.For(0, 100, options, x => { //Do something }); //Parallel for each Parallel.ForEach(Stocks, stock => { StockService.CallService(stock); }); //Invoke example Parallel.Invoke(() => StockService.CallService(Stocks[0]), () => StockService.CallService(Stocks[1]), () => StockService.CallService(Stocks[2]) ); //PLINQ Example var query = from s in Stocks let result = StockService.CallService(s) select result; var query2 = from s in Stocks.AsParallel() let result = StockService.CallService(s) select result; var query3 = from s in Stocks.AsParallel().AsOrdered() orderby s.Company let company = s.Company let result = StockService.CallService(s) select result; query3.ForAll(result => Console.WriteLine(result)); //as sequential var query4 = from s in Stocks.AsParallel().AsSequential() let result = StockService.CallService(s) select result; //select stock that doesnt exist to demonstrate aggregate exception var query5 = from s in Stocks.AsParallel() let result = StockService.CallService(Stocks[11]) select result; try { query5.ForAll(result => Console.WriteLine(result.ToString())); } catch (AggregateException e) { foreach (var ex in e.InnerExceptions) { Console.WriteLine(ex.Message); } } }