Heim > Backend-Entwicklung > C#.Net-Tutorial > Detaillierte Einführung in die Grundlagen der .NET-Parallelität und des Multithreading-Lernens

Detaillierte Einführung in die Grundlagen der .NET-Parallelität und des Multithreading-Lernens

迷茫
Freigeben: 2017-03-26 16:38:18
Original
1250 Leute haben es durchsucht

1. Vorläufiger Test der Parallelität:

public static void test()
        {
            for (int i = 0; i < 10000; i++)
            {
                Console.WriteLine(i);
            }
        }

        public static void test1()
        {
            for (int i = 0; i < 10000; i++)
            {
                Console.WriteLine(i + "aaaaaaaaaaaaaaa");
            }
        }
Nach dem Login kopieren

Aufruf:

static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
//串行执行:
test();
test1();
//并行执行:
17Parallel.Invoke(test, test1);
19sw.Stop();
21Console.WriteLine("共耗费时间:");
23Console.WriteLine(sw.ElapsedMilliseconds / 1000+"s");
}
Nach dem Login kopieren

2. Partitionsparallelität:

Parallel.ForEach(Partitioner.Create(1,20,5),(x,s)=>{
                //并行代码中自定义串行,第三个参数表示item1到item2之间的范围
                Console.WriteLine(x);
                for (int i = x.Item1; i < x.Item2; i++)
                {
                    if (i == 10) break;

                    Console.WriteLine(i);
                }
                s.Break();// 非常类似普通for循环中的break
                if (s.ShouldExitCurrentIteration)
                    return;
            });
Nach dem Login kopieren

3. Ausnahmeabfangen: AggregateException

int[] arry = new int[10001];

            for (int i = 0; i < 10000; i++)
            {
                arry[i] = i;
            }
            try
            {

                Parallel.ForEach(arry, (x, s) =>
                {
                    Console.WriteLine(x);
                    if (sw.Elapsed.Seconds > 3)
                    {
                        throw new TimeoutException("操作超时");
                    }
                });
            }
            catch (AggregateException ex)
            {
                foreach (var item in ex.InnerExceptions)
                {
                    Console.WriteLine(item);
                }
            }
Nach dem Login kopieren

4. Parallele Planung angeben:

ParallelOptions options = new ParallelOptions();
            options.MaxDegreeOfParallelism = 1;//如果设置为1就类似于串行代码按顺序执行
            options.MaxDegreeOfParallelism =Environment.ProcessorCount;//获取计算机上面的处理器数量
            Parallel.For(1,10,options,(x) =>
            {
                Console.WriteLine(x);
            });
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Grundlagen der .NET-Parallelität und des Multithreading-Lernens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage