class Program { static void Main() { int[] mass=new int[10000]; var rand = new Random(); var sum1 = 0; for (int i = 0; i < mass.Length; i++) { mass[i] = rand.Next(512); sum1 += mass[i]; } var sum2 = sum(mass); Console.WriteLine("{0} {1}",sum1, sum2); } static int sum_simple(int[] list) { int evenSum = 0, oddSum = 0; Thread computeEvens = new Thread(() => { int total = 0; for (int i = 0; i < list.Length; i += 2) total += list[i]; evenSum = total; }); Thread computeOdds = new Thread(() => { int total = 0; for (int i = 1; i < list.Length; i += 2) total += list[i]; oddSum = total; }); computeEvens.Start(); computeOdds.Start(); computeEvens.Join(); computeOdds.Join(); return evenSum + oddSum; } static int sum_async(int[] list) { Func computeEvens = (input) => { int total = 0; for (int i = 0; i < input.Length; i += 2) total += input[i]; return total; }; Func computeOdds = (input) => { int total = 0; for (int i = 1; i < input.Length; i += 2) total += input[i]; return total; }; IAsyncResult evenRes = computeEvens.BeginInvoke(list, null, null); IAsyncResult oddRes = computeOdds.BeginInvoke(list, null, null); int evenSum = computeEvens.EndInvoke(evenRes); int oddSum = computeOdds.EndInvoke(oddRes); return evenSum + oddSum; } static int sum(int[] list) { int evenSum = 0, oddSum = 0; Parallel.Invoke(() => { int total = 0; for (int i = 0; i < list.Length; i += 2) total += list[i]; evenSum = total; }, () => { int total = 0; for (int i = 1; i < list.Length; i += 2) total += list[i]; oddSum = total; }); return evenSum + oddSum; }