net 并行计算 学习 04 AsParallel


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace AsParallelDemo
{
    class Program
    {
        static void Main()
        {
            CancellationTokenSource source = new CancellationTokenSource();

            var nums = Enumerable.Range(0, 2).ToList();

            nums[0] = 10000;
            //WithDegreeOfParallelism 设置当前参与的线程数量
            //WithCancellation  用来操作取消动作
            //WithExecutionMode  ForceParallelism强制并行计算  default让系统自己选择是串行还是并行
            var query = from n in nums.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount)
                                                   .WithCancellation(source.Token)
                                                   .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                                                   .WithMergeOptions(ParallelMergeOptions.Default)
                        select new
                        {
                            thread = GetThreadID(),
                            num = n
                        };
            //source.Cancel();
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }

            Console.Read();
        }

        static int GetThreadID()
        {
            return Thread.CurrentThread.ManagedThreadId;
        }
    }
}



作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1