异步任务队列

异步任务队列

Task.WhenAll(List<Task>)等List中所有的异步任务完成后才算完成
Task.WhenAny(List<Task>)List中某个完成就完成
较常用的是Task.WhenAll(List<Task>)

不await去执行读取三个文件内容的异步操作,将它们都放到Task.WhenAll()中,等它们都完成后输出结果

        static async Task Main(string[] args)
        {
            Task<string> t1 = File.ReadAllTextAsync(@"C:\Users\张跑跑\Desktop\net\async\1.txt");
            Task<string> t2 = File.ReadAllTextAsync(@"C:\Users\张跑跑\Desktop\net\async\2.txt");
            Task<string> t3 = File.ReadAllTextAsync(@"C:\Users\张跑跑\Desktop\net\async\3.txt");

            string[] strs = await Task.WhenAll(t1, t2, t3);
            foreach (var item in strs)
            {
                Console.WriteLine(item);
            }
        }

结果是

改成使用WhenAny(),等它们都完成后输出结果

        static async Task Main(string[] args)
        {
            Task<string> t1 = File.ReadAllTextAsync(@"C:\Users\张跑跑\Desktop\net\async\1.txt");
            Task<string> t2 = File.ReadAllTextAsync(@"C:\Users\张跑跑\Desktop\net\async\2.txt");
            Task<string> t3 = File.ReadAllTextAsync(@"C:\Users\张跑跑\Desktop\net\async\3.txt");

            var strs = await Task.WhenAny(t1, t2, t3);
            Console.WriteLine(strs);
        }

结果是永远只有一个值被拿到就打印了

posted @ 2023-01-31 23:57  long-livece  阅读(34)  评论(0编辑  收藏  举报