zoukankan      html  css  js  c++  java
  • C# Parallel 使用

      ParallelLoopResult result = Parallel.For(0, 10, i =>
                {
                    Console.WriteLine("{0}, task: {1}, thread: {2}", i,
                        Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(10);
                });
               
                Console.WriteLine("Is completed: {0}, run time is {1}", result.IsCompleted, watch.ElapsedMilliseconds);

     async 、 await 使用

    ParallelLoopResult result1 = Parallel.For(0, 10, async i =>
                {
                    Console.WriteLine("{0}, task: {1}, thread: {2}", i,
              Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                    await Task.Delay(10);
                    Console.WriteLine("{0}, task: {1}, thread: {2}", i,
              Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                });
                Console.WriteLine("Is completed: {0}, run time is {1}", result.IsCompleted, watch.ElapsedMilliseconds);

    条件退出

                ParallelLoopResult result = Parallel.For(10, 40, async (i, s) =>
                {
                    Console.WriteLine("i: {0} task: {1}", i, Task.CurrentId);
                    Thread.Sleep(10); // await Task.Delay(10);
                    if (i > 15)
                        s.Break();
                });
    
                Console.WriteLine("Is completed: {0}", result.IsCompleted);
                if (!result.IsCompleted)
                    Console.WriteLine("lowest break iteration: {0}", result.LowestBreakIteration);

     For<T> 使用

      Parallel.For<string>(0, 20, () =>
                    {
                        Console.WriteLine("init thread {0}, task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
                        return String.Format("t{0}", Thread.CurrentThread.ManagedThreadId);
                    }, (i, s, str) =>
                    {
                        Console.WriteLine("body i {0} str1 {1} thread {2} task {3}", i, str,
                        Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
                        Thread.Sleep(10);
                        return String.Format("i {0}", i);
                    }, s =>
                    {
                        Console.WriteLine("finally {0}", s);
                    });

    ForEach<T> 使用

                string[] data = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve" };
    
                ParallelLoopResult result = Parallel.ForEach<string>(data, s =>
                {
                    Console.WriteLine(s);
                });
    
                Parallel.ForEach<string>(data, (i, s, l) =>
                {
    
                    Console.WriteLine("{0}, {1}", i, l);
                });

    Invoke 方法组调用

      Parallel.Invoke(Foo, Bar);
    
            static void Foo()
            {
                Console.WriteLine("foo");
            }
            static void Bar()
            {
                Console.WriteLine("bar");
            }    
  • 相关阅读:
    Java实现HttpClient发送GET、POST请求(https、http)
    解决.net core 3.1 json日期带T的问题
    Java验证身份证号码的格式
    c++20新特性concept
    位图
    Linux内核 hlist_head/hlist_node结构解析
    linux将c++程序制作成.deb
    应用程序或动态库中与加载的其他动态库的类或者函数重名问题
    vue props 属性值接受多个类型
    异步循环
  • 原文地址:https://www.cnblogs.com/farmer-y/p/6030088.html
Copyright © 2011-2022 走看看