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");
            }    
  • 相关阅读:
    poj3032
    poj2603
    poj2019
    poj2369
    AVI 录像功能压缩算法设置
    陆其明的新书《脚本驱动的应用软件开发方法与实践》
    c# 动态编译
    !!!分享:把bmp格式的图片转化为AVI格式的视频操作的封装类其中对于AVI API的函数的使用较为完整
    视频文件格式和视频编码方式
    activex 控件的id 定义位置+使用ocx控件的客户端程序中对控件定义的文件中控件id定义的位置
  • 原文地址:https://www.cnblogs.com/farmer-y/p/6030088.html
Copyright © 2011-2022 走看看