zoukankan      html  css  js  c++  java
  • Parallel类(简化Task 操作)

    Parallel类

    Parallel类是对线程的一个很好抽象。该类位于System.Threading.Tasks命名空间中,提供了数据和任务并行性。

    1.用Parallel.For()方法循环

            //// simple scenario
            ParallelLoopResult result =
                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}", result.IsCompleted);

    2.提前停止Parallel.For

    For()方法的一个重载版本接受第三个Action<int, ParallelLoopState>类型的参数。使用这些参数定义一个方法,就可以调用ParallelLoopState的Break()或Stop()方法,以影响循环结果。

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

    3.使用Parallel.ForEach()方法循环

          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,
              (s, pls, l) =>
              {
                Console.WriteLine("{0} {1}", s, l);
    
              });

    4.通过Parallel.Invoke()方法调用多个方法

        static void ParallelInvoke()
        {
          Parallel.Invoke(Foo, Bar);
        }
    
        static void Foo()
        {
          Console.WriteLine("foo");
        }
    
        static void Bar()
        {
          Console.WriteLine("bar");
        }

    推荐阅读:改善C#程序的建议10:用Parallel简化Task

  • 相关阅读:
    SQLServer 高可用、高性能和高保护延伸
    SQLServer 通过DMV实现低影响的自动监控和历史场景追溯
    查找表包含的页和页所在的表
    出身在二三线城市软件工作者的悲哀
    SQL语句实现取消自增列属性
    基于Apache(without ssl)的svn环境搭建
    sqlite3 命令行操作
    HTML常用特殊符号集
    IOS项目目录结构和开发流程
    Mac OSX 快捷键&命令行
  • 原文地址:https://www.cnblogs.com/hmliang/p/5398285.html
Copyright © 2011-2022 走看看