zoukankan      html  css  js  c++  java
  • 多线程,控制Task的20个并发数量,全部子线程执行完后,获取所有返回的值

    //控制下Task的20个并发数量,
    List<Task> taskList = new List<Task>();
    for (int i = 0; i < 10000; i++)
    {
    int k = i;
    if (taskList.Count(t => t.Status != TaskStatus.RanToCompletion) >= 20)
    {
    Task.WaitAny(taskList.ToArray());
    taskList = taskList.Where(t => t.Status != TaskStatus.RanToCompletion).ToList();
    }
    taskList.Add(Task.Run(() =>
    {
    Console.WriteLine($"This is {k} running ThreadId={Thread.CurrentThread.ManagedThreadId.ToString("00")}");
    Thread.Sleep(2000);
    }));
    }
    //taskList 全部子线程执行完后,获取所有返回的值
    for(int i=0;i<taskList .count();i++)
    {
    var result= taskList[i].result;
    }

    ------demo-------

    //循环List,启用20个线程去执行计算每个item的销售价格,全部销售价格计算完成,返回销售价格;
    public static void Show()
    {
    List<Task> taskList = new List<Task>();

    int skuList = 10000;
    for (int i = 0; i < skuList; i++)
    {
    try
    {
    int k = i;
    if (taskList.Count(t => t.Status != TaskStatus.RanToCompletion) >= 20)
    {
    Task.WaitAny(taskList.ToArray());
    taskList = taskList.Where(t => t.Status != TaskStatus.RanToCompletion).ToList();
    }

    taskList.Add(Task.Run(() =>
    {
    var result = GetCalculator(k, Thread.CurrentThread.ManagedThreadId.ToString());
    }));
    }
    catch(Exception ex)
    {
    //throw ex
    }

    }

    Task.WaitAll(taskList.ToArray());

    //taskList 全部子线程执行完后,获取所有list返回的值
    for (int i = 0; i < list.Count(); i++)
    {
    var result = list[i];
    }
    }


    public static List<string> GetCalculator(int i,string id)
    {

    lock (Lock)
    {
    list.Add(i.ToString() + "_Thread_" + id);
    }
    return list;
    }

  • 相关阅读:
    Nginx开发从入门到精通
    Nginx配置文件(nginx.conf)配置详解
    转贝叶斯推断及其互联网应用(一):定理简介
    Vim 使用入门快捷键
    从贝叶斯定理说开去
    转特征值和特征向量
    第四章 特征值与特征向量
    numpy基础入门
    python range函数与numpy arange函数
    转悠望南山 Python闲谈(二)聊聊最小二乘法以及leastsq函数
  • 原文地址:https://www.cnblogs.com/csj007523/p/15037685.html
Copyright © 2011-2022 走看看