- Invoke - wykonuje równolegle tablicę delegatów
- For - pętla for wykonywana równolegle
- Foreach - pętla foreach wykonywana równolegle
static void InvokeTest() { Parallel.Invoke(() => new WebClient().DownloadString("http://www.agh.edu.pl/"), () => new WebClient().DownloadString("http://www.eaiib.agh.edu.pl/")); } static void ForTest() { var keyPairs = new string[6]; Parallel.For(0, keyPairs.Length, i => keyPairs[i] = RSA.Create().ToXmlString(true)); foreach (var keyPair in keyPairs) Console.Write(keyPair); } static void ForeachTest() { var arr = new int[] { 166, 147, 159, 156 }; Parallel.ForEach(arr, s => Console.WriteLine("Alfa Romeo {0}", s)); }
Metoda For jest przeładowana na wiele sposobów. Jeżeli potrzebujemy, by wykonywać skomplikowane operacje matematyczne, możemy skorzystać z wersji metody, w której możemy wykorzystać lokalną zmienną, inicjalizowaną przez jednego z delegatów.
static void ForLockerTest() { object locker = new object(); double grandTotal = 0; Parallel.For(1, 10000000, () => 0.0, (i, state, localTotal) => localTotal + Math.Sqrt(i), localTotal => { lock (locker) grandTotal += localTotal; } ); Console.WriteLine(grandTotal); }
Brak komentarzy:
Prześlij komentarz