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;
    }

  • 相关阅读:
    使用Task创建任务
    动态,静态库的发布和使用
    gcc编译
    knockout.js的学习笔记2
    网络爬虫基本原理(一)
    .Net项目分层与文件夹结构
    ASP.NET MVC的客户端验证:jQuery的验证
    ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
    CMake 手册详解
    一个真实的应用程序 — 精通ASP.NET MVC 3
  • 原文地址:https://www.cnblogs.com/csj007523/p/15037685.html
Copyright © 2011-2022 走看看