当前位置: 首页 > article >正文

C#多线程开发之----List Task有返回值

C#中的List<T>是一个泛型集合类,可以用来存储任意类型的元素。在多线程环境下,可以使用Task<TResult>类来执行异步操作并返回结果。通过将List<T>与Task<TResult>结合使用,可以实现多线程处理带有返回值的操作,从而提高程序的效率和性能。

以下是使用List<T>和Task<TResult>实现多线程处理带有返回值的操作的优点:

  1. 提高程序的性能:在多线程环境下,程序的执行速度会得到显著提升。这是因为多线程可以将一个任务分成多个子任务,并分别在不同的线程上执行,从而充分利用计算机的多个CPU核心。
  2. 更好的响应性能:在处理大量数据时,如果使用单线程,程序会一直等待任务完成而无法响应其他操作。而使用多线程,可以将任务分解成多个子任务,并在不同的线程上执行。这样可以使程序在等待某个子任务完成时,同时处理其他子任务,从而提高程序的响应性能。
  3. 更好的可扩展性:随着计算机硬件的发展,计算机的CPU核心数越来越多。使用多线程可以充分利用计算机的多个CPU核心,从而提高程序的扩展性。这样可以使程序在未来的硬件平台上更好地运行。
  4. 更好的并发性:在多线程环境下,可以同时执行多个操作。这样可以使程序在处理多个任务时更加高效和流畅。
  5. 更好的可维护性:使用多线程可以将复杂的任务分解成多个简单的子任务,每个子任务都可以单独测试和维护。这样可以提高代码的可维护性和可测试性。

使用List<T>和Task<TResult>实现多线程处理带有返回值的操作可以提高程序的性能、响应性能、可扩展性、并发性和可维护性。

private  async void button24_Click(object sender, EventArgs e)
        {
            // 写法一:创建多个任务
            var tasks = new List<Task<string>>
            {
                Task.Factory.StartNew(() => DoWork(1)),
                Task.Factory.StartNew(() => DoWork(2)),
                Task.Factory.StartNew(() => DoWork(3))
            };

            var results = await Task.WhenAll(tasks);
            // 输出结果
            Console.WriteLine("任务结果: " + string.Join(", ", results));


            //写法二:
            List<Task<string>> taskList = new List<Task<string>>();
            taskList.Add(
                Task.Run(()=> {
                    return DoWork(1);
                })
                );
            taskList.Add(
                Task.Run(() => {
                    return DoWork(2);
                })
                );
            taskList.Add(
                Task.Run(() => {
                    return DoWork(3);
                })
                );
            taskList.Add(
                Task.Run(() => {
                    return DoWork(4);
                })
                );
            // 等待所有任务完成并获取结果
            var results2 = await Task.WhenAll(taskList);
            Console.WriteLine("任务结果2: " + string.Join(", ", results2));

            Console.WriteLine("任务结果: " + DateTime.Now.Hour); 
        }


http://www.kler.cn/a/153262.html

相关文章:

  • RPG项目01_场景及人物动画管理器
  • 【零基础入门Docker】Dockerfile中的USER指令以及dockerfile命令详解
  • C++ 传递指针给函数
  • 从PDF和图像中提取文本,以供大型语言模型使用
  • java开发之个微群聊自动添加好友
  • scrapy爬虫中间件和下载中间件的使用
  • git基本概念
  • 【概率统计】如何理解概率密度函数及核密度估计
  • Doris 数据导入一:Broker Load 方式
  • 树莓派3B+ PCB叠层设计
  • 连锁零售企业如何提高异地组网的稳定性?
  • PVE系列-LVM安装MacOS的各个版本
  • github / gitlab s申城 配置密钥 ssh key
  • 【SparkSQL】SparkSQL函数定义(重点:定义UDF函数、使用窗口函数)
  • 【Linux--进程控制】
  • 简单小结类与对象
  • 已知二叉树采用顺序存储,求编号为i和j的结点的最近公共祖先结点编号。
  • 记一次:Python的学习笔记二(Django项目1)
  • Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)
  • mac如何永久设置环境变量