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");
            }    
  • 相关阅读:
    关于object和embed
    关于跨域问题的解决办法
    SQL 中 SELECT 语句的执行顺序
    sql子查询 嵌套SELECT语句
    PL/SQL中SELECT总结
    SQL Server
    SQL Server SELECT逻辑处理顺序
    SQL 基础:Select语句,各种join,union用法
    sql基础知识(新手必备)
    mysql处理海量数据时的一些优化查询速度方法
  • 原文地址:https://www.cnblogs.com/farmer-y/p/6030088.html
Copyright © 2011-2022 走看看