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://scyanting.com/article/cccpoh.html