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

一、说明

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

 

posted @ 2023-06-25 09:24  mapstar  阅读(244)  评论(0编辑  收藏  举报