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");
            }    
  • 相关阅读:
    【转载】微服务,我们需要哪些基础框架?
    Flume多Sink方案修正
    Linux find命令
    Kafka日志及Topic数据清理
    Kafka日志清除策略
    Oracle误删除数据的恢复方法
    Kafka中Topic级别配置
    Kafka server部署配置优化
    配置Kafka集群和zookeeper集群
    改变家目录
  • 原文地址:https://www.cnblogs.com/farmer-y/p/6030088.html
Copyright © 2011-2022 走看看