• 有序的并行任务!


    把任务分为前置后置。

    耗时较多的工作放到前置任务里。

    最后输出结果通过后置任务输出。

    public static void CombTask<T, TR>(List<T> source, Func<T, TR> parallelTask, Action<Task<TR>, T> orderedTask)
            {
                int c = 0;
                for (int i = 0 ; i < source.Count ; i++)
                {
                    int j = i;
                    Task.Run(() => parallelTask.Invoke(source[j])).ContinueWith(tt =>
                    {
                        Exception exception = tt.Exception;
                        while (true)
                        {
                            if (j == c)
                            {
                                try
                                {
                       if(exception==null) orderedTask
    ?.Invoke(tt, source[j]); } catch (Exception e) { exception = e; }finally{ Interlocked.Increment(ref c);
                     }
    break; } } if (exception != null) throw tt.Exception; }); } }
     public static void Main()
            {
                var list = new List<int>();
                for (int i = 0 ; i < 100 ; i++)
                    list.Add(i);
                var now = DateTime.Now;
                CombTask(list, j =>
                {
                    Console.WriteLine($"前置任务乱序{j}");
                    Thread.Sleep(1000);
                    return j;
                }, (ttt, item) =>
                {
                    Console.WriteLine($"-----------后置任务顺序{item}耗时:{ (DateTime.Now - now).TotalMilliseconds}");
                });
                Console.ReadKey();
                return;
    
    }

    输出:

    前置任务乱序4
    前置任务乱序5
    前置任务乱序0
    前置任务乱序1
    前置任务乱序2
    前置任务乱序3
    前置任务乱序6
    前置任务乱序7
    前置任务乱序8
    -----------后置任务顺序0耗时:1088.0919
    -----------后置任务顺序1耗时:1089.0881
    -----------后置任务顺序2耗时:1094.0744
    -----------后置任务顺序3耗时:1094.0744
    -----------后置任务顺序4耗时:1103.0503
    -----------后置任务顺序5耗时:1113.0235
    -----------后置任务顺序6耗时:1113.0235
    -----------后置任务顺序7耗时:1113.0235
    前置任务乱序14
    前置任务乱序11
    前置任务乱序9
    前置任务乱序10
    前置任务乱序12
    前置任务乱序13
    前置任务乱序15
    前置任务乱序16
    前置任务乱序17
    -----------后置任务顺序8耗时:2048.9359
    前置任务乱序18
    -----------后置任务顺序9耗时:2118.775
    前置任务乱序19
    -----------后置任务顺序10耗时:2119.7734
    -----------后置任务顺序11耗时:2120.7701
    -----------后置任务顺序12耗时:2121.7702
    -----------后置任务顺序13耗时:2122.7646
    -----------后置任务顺序14耗时:2122.7646
    -----------后置任务顺序15耗时:2123.7619
    -----------后置任务顺序16耗时:2123.7619
    前置任务乱序26
    前置任务乱序25
    前置任务乱序23
    前置任务乱序20
    前置任务乱序22
    前置任务乱序24
    前置任务乱序21
    -----------后置任务顺序17耗时:3047.4016
    前置任务乱序28
    前置任务乱序27
    -----------后置任务顺序18耗时:3052.3879
    前置任务乱序29
    -----------后置任务顺序19耗时:3120.8844
    前置任务乱序30
    -----------后置任务顺序20耗时:3131.8537
    前置任务乱序31
    -----------后置任务顺序21耗时:3139.8324
    -----------后置任务顺序22耗时:3139.8324
    -----------后置任务顺序23耗时:3139.8324
    -----------后置任务顺序24耗时:3140.8308
    -----------后置任务顺序25耗时:3143.822
    -----------后置任务顺序26耗时:3143.822
    前置任务乱序37
    前置任务乱序36
    前置任务乱序32
    前置任务乱序34
    前置任务乱序33
    前置任务乱序35
    前置任务乱序38
    -----------后置任务顺序27耗时:4051.1471
    -----------后置任务顺序28耗时:4051.1471
    前置任务乱序40
    前置任务乱序39
    -----------后置任务顺序29耗时:4055.0969
    前置任务乱序41
    -----------后置任务顺序30耗时:4121.9494
    前置任务乱序42
    -----------后置任务顺序31耗时:4133.9279
    前置任务乱序43
    -----------后置任务顺序32耗时:4150.8717
    前置任务乱序44
    -----------后置任务顺序33耗时:4151.8695
    -----------后置任务顺序34耗时:4151.8695
    前置任务乱序46
    前置任务乱序45
    -----------后置任务顺序35耗时:4156.857
    -----------后置任务顺序36耗时:4159.8533
    -----------后置任务顺序37耗时:4162.8405
    前置任务乱序48
    前置任务乱序49
    前置任务乱序47
    前置任务乱序50
    前置任务乱序51
    -----------后置任务顺序38耗时:5047.6206
    前置任务乱序52
    -----------后置任务顺序39耗时:5052.6092
    -----------后置任务顺序40耗时:5052.6092
    前置任务乱序54
    前置任务乱序53
    -----------后置任务顺序41耗时:5056.5943
    前置任务乱序55
    -----------后置任务顺序42耗时:5123.5963
    前置任务乱序56
    -----------后置任务顺序43耗时:5135.5646
    前置任务乱序57
    -----------后置任务顺序44耗时:5152.5186
    前置任务乱序58
    -----------后置任务顺序45耗时:5159.5023
    -----------后置任务顺序46耗时:5160.4979
    前置任务乱序60
    前置任务乱序59
    -----------后置任务顺序47耗时:5169.4766
    -----------后置任务顺序48耗时:5172.4889
    -----------后置任务顺序49耗时:5173.4657
    -----------后置任务顺序50耗时:5174.4612
    前置任务乱序64
    前置任务乱序61
    前置任务乱序62
    前置任务乱序63
    前置任务乱序65
    -----------后置任务顺序51耗时:6047.6064
    前置任务乱序66
    -----------后置任务顺序52耗时:6049.6032
    前置任务乱序67
    -----------后置任务顺序53耗时:6058.5831
    -----------后置任务顺序54耗时:6060.5776
    前置任务乱序68
    前置任务乱序69
    -----------后置任务顺序55耗时:6061.5823
    前置任务乱序70
    -----------后置任务顺序56耗时:6125.6625
    前置任务乱序71
    -----------后置任务顺序57耗时:6138.6207
    前置任务乱序72
    -----------后置任务顺序58耗时:6154.6286
    前置任务乱序73
    -----------后置任务顺序59耗时:6172.6141
    -----------后置任务顺序60耗时:6172.6141
    前置任务乱序75
    -----------后置任务顺序61耗时:6177.5679
    -----------后置任务顺序62耗时:6179.5653
    前置任务乱序77
    -----------后置任务顺序63耗时:6181.5667
    -----------后置任务顺序64耗时:6186.5444
    前置任务乱序79
    前置任务乱序76
    前置任务乱序74
    前置任务乱序78
    前置任务乱序80
    -----------后置任务顺序65耗时:7047.6286
    前置任务乱序81
    -----------后置任务顺序66耗时:7049.6242
    前置任务乱序82
    -----------后置任务顺序67耗时:7050.6198
    前置任务乱序83
    -----------后置任务顺序68耗时:7065.5816
    前置任务乱序84
    -----------后置任务顺序69耗时:7070.5667
    前置任务乱序85
    -----------后置任务顺序70耗时:7071.5629
    前置任务乱序86
    -----------后置任务顺序71耗时:7129.4229
    前置任务乱序87
    -----------后置任务顺序72耗时:7139.5269
    前置任务乱序88
    -----------后置任务顺序73耗时:7157.4748
    前置任务乱序89
    -----------后置任务顺序74耗时:7193.3757
    -----------后置任务顺序75耗时:7193.3757
    -----------后置任务顺序76耗时:7195.3747
    -----------后置任务顺序77耗时:7197.3607
    前置任务乱序93
    前置任务乱序92
    -----------后置任务顺序78耗时:7200.3525
    -----------后置任务顺序79耗时:7200.3525
    前置任务乱序95
    前置任务乱序90
    前置任务乱序94
    前置任务乱序91
    前置任务乱序96
    -----------后置任务顺序80耗时:8048.2657
    前置任务乱序97
    -----------后置任务顺序81耗时:8049.2653
    前置任务乱序98
    -----------后置任务顺序82耗时:8052.2639
    前置任务乱序99
    -----------后置任务顺序83耗时:8055.2477
    -----------后置任务顺序84耗时:8067.4492
    -----------后置任务顺序85耗时:8071.2033
    -----------后置任务顺序86耗时:8075.1947
    -----------后置任务顺序87耗时:8132.2958
    -----------后置任务顺序88耗时:8142.2718
    -----------后置任务顺序89耗时:8162.266
    -----------后置任务顺序90耗时:8202.1587
    -----------后置任务顺序91耗时:8204.1538
    -----------后置任务顺序92耗时:8204.1538
    -----------后置任务顺序93耗时:8206.1558
    -----------后置任务顺序94耗时:8207.1468
    -----------后置任务顺序95耗时:8207.1468
    -----------后置任务顺序96耗时:9047.6075
    -----------后置任务顺序97耗时:9049.6015
    -----------后置任务顺序98耗时:9050.601
    -----------后置任务顺序99耗时:9052.6831

  • 相关阅读:
    Java 异常Exception e中e的getMessage()和toString()以及 e.printStackTrace();方法的区别
    js几秒以后倒计时跳转示例
    Java读取property配置文件
    js 设置下拉框的默认值
    JS的可枚举性
    Object的原型拷贝-create、assign、getPrototypeOf 方法的结合
    JS 事件循环机制
    vue nextTick深入理解-vue性能优化、DOM更新时机、事件循环机制
    vue 实战问题-watch 数组或者对象
    vue2.0读书笔记2-进阶
  • 原文地址:https://www.cnblogs.com/zhuwansu/p/11278490.html
Copyright © 2020-2023  润新知