网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C#中的List数据怎么利用多线程进行处理-创新互联

C# 中的List数据怎么利用多线程进行处理?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联公司专注于企业成都全网营销推广、网站重做改版、花山网站定制设计、自适应品牌网站建设、成都h5网站建设商城网站定制开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为花山等各大城市提供网站开发制作服务。

代码思路

将要处理的数据放到ConcurrentQueue中,然后开启多个线程去处理数据,处理完成后,再到队列中获取下一个待处理数据。

ConcurrentQueue 表示线程安全的先进先出 (FIFO) 集合,属于System.Collections.Concurrent命名空间下的一个数据结构

直接上代码

/// 
/// 多线程处理数据(无返回值)
/// 
/// 数据类型
/// 待处理数据
/// 数据处理方法(有参数无返回值)
/// 处理线程数量
/// 是否等待执行结束
static void RunTask(List list, Action action, int threadCount = 5, bool waitFlag = true)
{
  ConcurrentQueue queue = new ConcurrentQueue(list);
  Task[] tasks = new Task[threadCount];
  for (int i = 0; i < threadCount; i++)
  {
    tasks[i] = Task.Run(() =>
     {
       while (queue.TryDequeue(out T t))
       {
         action(t);
       }
     });
  }
  if (waitFlag)
  {
    Task.WaitAll(tasks);
  }
}
/// 
/// 多线程处理数据(返回处理后列表)
/// 
/// 数据类型
/// 待处理数据
/// 数据处理方法(有参数有返回值)
/// 处理线程数量
/// 数据处理后结果
static List RunTask(List list, Func func, int threadCount = 5)
{
  var result = new List();
  ConcurrentQueue queue = new ConcurrentQueue(list);
  Task>[] tasks = new Task>[threadCount];
  for (int i = 0; i < threadCount; i++)
  {
    tasks[i] = Task.Run>(() =>
    {
      var rList = new List();
      while (queue.TryDequeue(out T t))
      {
        rList.Add(func(t));
      }
      return rList;
    });
  }
  Task.WaitAll(tasks);
  for (int i = 0; i < threadCount; i++)
  {
    result.AddRange(tasks[i].Result);
  }
  return result;
}

调用方法

List list = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//输出列表中的数据,且加上“action”字符前缀
RunTask(list, d => { Console.WriteLine("action" + d); });

//对列表中数据都执行 “*2” 的操作
var result = RunTask(list, d => { return d * 2; });
result.ForEach(d => Console.WriteLine(d));

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


网页标题:C#中的List数据怎么利用多线程进行处理-创新互联
网站链接:http://bjjierui.cn/article/cccpoh.html

其他资讯