首页 > 编程语言 >C#异步方法中Task.WhenAll的使用

C#异步方法中Task.WhenAll的使用

时间:2023-06-25 09:33:54浏览次数:61  
标签:Task string C# System filename WhenAll countTasks

一、说明

Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。
Task.WhenAll():所有task完成时,task才完成,用于等待多个任务执行结束。
Task.WhenAny():任何一个task完成时,task完成。

二、示例:

using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace 取消
{
    class Program
    {
        static  void Main(string[] args)
        {

            FileCharsCount();
        }

        /// <summary>
        /// 统计所有文件的字符数
        /// </summary>
        static async void FileCharsCount()
        {
            string[] files = Directory.GetFiles(@"D:\test\temp");
            Task<int>[] countTasks = new Task<int>[files.Length];

            for (int i = 0; i < countTasks.Length; i++)
            {
                string filename = files[i];
                Task<int> t = ReadCharsCount(filename);
                countTasks[i] = t;
            }

            int[] counts = await Task.WhenAll(countTasks);  //取到所有结果返回
            int c = counts.Sum();   //统计所有文件的字符数

            Console.WriteLine(c);
            Console.ReadKey();
        }

        static async Task<int> ReadCharsCount(string filename)
        {
            string s = await File.ReadAllTextAsync(filename);
            return s.Length;
        }
    }
}

 

标签:Task,string,C#,System,filename,WhenAll,countTasks
From: https://www.cnblogs.com/mapstar/p/17502139.html

相关文章

  • C语言中将二维数组作为函数参数来传递
    C语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:方法一,形参给出第二维的长度#include<stdio.h>voidfunc(intn,charstr[][5]){inti;for(i=0;i<n;i++)printf("/nstr[%d]=%s/n",i,str[i]);}voidmain(){char*p[3];charstr[]......
  • 【转】SpringBoot 线上服务假死,CPU 内存正常
    文章来源:blog.csdn.net/zhangcongyi420/article/details/1311395991、背景开发小伙伴都知道线上服务挂掉,基本都是因为cpu或者内存不足,出现GC频繁OOM之类的情况。本篇文章区别以上的情况给小伙伴们带来不一样的服务挂掉。 2、问题排查老规矩在集群环境中同一个服务......
  • Maven的maven-resources-plugin插件介绍
    Maven的maven-resources-plugin插件是一个用于处理资源文件的插件。它在Maven构建过程中负责复制项目中的资源文件到生成的目标目录,使得这些资源文件可以被应用程序访问和使用。该插件具有以下特点和功能:复制资源文件:maven-resources-plugin插件会将项目中的资源文件(如......
  • English Vocabulary Day 1
    EnglishVocabularyDay1vocabularyarduousardentarcticarchitecturearchitectarcharborealarbitratearbitraryarableapaqueaquaticaquariumineptinaptaptitudeaptadeptadpatanthropologyanthologyanthemantonymanticlockwisepartisanperennialm......
  • 解决echarts鼠标选择错位的问题
    在写echarts时遇到的问题,鼠标选择总是和图形错位,同事提供的解决方法,在这里记录一下。1.增加以下代码exportdefaultfunctionresizeEcharts(ele){letrate=1920/window.innerWidth;if(ele.style){ele.style.zoom=1*rate;ele.style.transform=`......
  • struct模块
    struct模块案例详见:(4)socket套接字使用模版-Chimengmeng-博客园(cnblogs.com)struct.pack()是Python内置模块struct中的一个函数它的作用是将指定的数据按照指定的格式进行打包,并将打包后的结果转换成一个字节序列(bytestring)可以用于在网络上传输或者储存于文件中。......
  • 蔚来手撕代码题:三个线程循环打印ABC
    问题如下:https://www.nowcoder.com/discuss/493178141461041152思路分析三个线程交替打印ABC的实现方法有很多,我个人比较倾向于使用JUC下的CyclicBarrier(循环栅栏,也叫循环屏障)来实现,因为循环栅栏天生就是用来实现一轮一轮多线程任务的,它的核心实现思路如下图所示:Cycl......
  • 强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0
    强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v01、定义算法相比于Qlearning,DQN本质上是为了适应更为复杂的环境,并且经过不断的改良迭代,到了NatureDQN(即VolodymyrMnih发表的Nature论文)这里才算是基本完善。DQN主要改动的点有三个:使用深度神经网络替......
  • C++面试八股文:std::string是如何实现的?
    C++面试八股文:std::string是如何实现的?某日二师兄参加XXX科技公司的C++工程师开发岗位第18面:面试官:std::string用过吧?二师兄:当然用过(废话,C++程序员就没有没用过std::string的)。面试官:std::string("hello")+"world"、"hello"+std::string("world")和std::string("hello")......
  • Elasticsearch专题精讲—— REST APIs —— Cluster APIs —— Cluster update settin
    RESTAPIs——ClusterAPIs——ClusterupdatesettingsAPIhttps://www.elastic.co/guide/en/elasticsearch/reference/8.8/cluster-update-settings.html#cluster-update-settingsConfiguresdynamicclustersettings.配置动态群集设置......