任务分区
using System; using System.Text; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using System.Linq; using System.Collections.Concurrent; namespace Test { class Program { /// <summary> /// 任务分区 /// </summary> static void Main() { //var list = Enumerable.Range(1, 50).ToArray(); var list = Enumerable.Range(1, 100).ToArray(); //Parallel.ForEach(System.Collections.Concurrent.Partitioner.Create(0, list.Length), (Tuple<int, int> range, ParallelLoopState state, long partition) => Parallel.ForEach(Partitioner.Create(0, list.Length), (range, state, partition) => { string buffer = String.Format("Partitioner {0,3}:", partition); for (int i = range.Item1; i < range.Item2; i++) { Thread.SpinWait(4000); buffer += string.Format(" {0,3}", list[i]); } Console.WriteLine(buffer); }); Console.WriteLine("\n执行完成"); Console.ReadLine(); } } }
打印运行结果:
//var list = Enumerable.Range(1, 50).ToArray(); /* Partitioner 0: 1 2 3 4 Partitioner 2: 9 10 11 12 Partitioner 4: 17 18 19 20 Partitioner 1: 5 6 7 8 Partitioner 3: 13 14 15 16 Partitioner 5: 21 22 23 24 Partitioner 6: 25 26 27 28 Partitioner 9: 37 38 39 40 Partitioner 11: 45 46 47 48 Partitioner 12: 49 50 Partitioner 8: 33 34 35 36 Partitioner 10: 41 42 43 44 Partitioner 7: 29 30 31 32 执行完成 */ //var list = Enumerable.Range(1, 100).ToArray(); /* Partitioner 0: 1 2 3 4 5 6 7 8 Partitioner 1: 9 10 11 12 13 14 15 16 Partitioner 3: 25 26 27 28 29 30 31 32 Partitioner 2: 17 18 19 20 21 22 23 24 Partitioner 7: 57 58 59 60 61 62 63 64 Partitioner 4: 33 34 35 36 37 38 39 40 Partitioner 6: 49 50 51 52 53 54 55 56 Partitioner 9: 73 74 75 76 77 78 79 80 Partitioner 5: 41 42 43 44 45 46 47 48 Partitioner 8: 65 66 67 68 69 70 71 72 Partitioner 12: 97 98 99 100 Partitioner 11: 89 90 91 92 93 94 95 96 Partitioner 10: 81 82 83 84 85 86 87 88 执行完成 */

浙公网安备 33010602011771号