惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
博客园_首页
U
Unit 42
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
IT之家
IT之家
G
Google Developers Blog
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Jina AI
Jina AI
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
小众软件
小众软件
H
Help Net Security

博客园 - 广阔之海

Halcon的三角函数 Halcon轮廓插值方法 C# 控件选项变化事件处理 深度学习执行速度不稳定的解决方法 Halcon - 深度学习 - 目标分类 Halcon 画一个时钟 Halcon 解方程(solve_matrix) C# 使用Serilog日志框架 Halcon 生成标定板 Halcon 中的形态学 Halcon的提取中心线算法 C# 消灭switch的面向映射编程 Halcon 通过坐标轴过滤点云数据 Halcon图像投影映射 C# 获取MySql的数据库结构信息 C# HttpClient的使用方法总结 MySql字符集导致特殊字符保存出错问题处理 Asp.Net Core 动态生成WebApi Asp.Net Core WebApi中集成Jwt认证
C#中Task的用法
广阔之海 · 2022-09-12 · via 博客园 - 广阔之海

以下代码是对官方示例的修改:

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            MakeBreakfast01();
            MakeBreakfast02();
            MakeBreakfast03();
            Console.ReadLine();
        }

        // 烤面包、煎蛋、煎肉一样一样做
        public static void MakeBreakfast01()
        {            
            Console.WriteLine("开始做早餐01");
            Stopwatch watch = Stopwatch.StartNew();
            Task.Run(async () =>
            {
                await ToastBreadAsync();
                await FryEggsAsync();
                await FryBaconAsync();
            }).Wait();
            watch.Stop();
            Console.WriteLine($"早餐01完成,耗时{watch.Elapsed.Seconds}秒");
        }

        // 有一个面包机和一个锅,煎蛋、煎肉先后进行,烤面包同时进行
        public static void MakeBreakfast02()
        {            
            Console.WriteLine("开始做早餐02");
            Stopwatch watch = Stopwatch.StartNew();
            var taskToastBread = ToastBreadAsync();
            var taskFryEggsAndBacon = Task.Run(async () =>
            {
                await FryEggsAsync();
                await FryBaconAsync();
            });            
            Task.WaitAll(taskToastBread, taskFryEggsAndBacon);
            watch.Stop();
            Console.WriteLine($"早餐02完成,耗时{watch.Elapsed.Seconds}秒");
        }

        // 有一个面包机和两个锅,烤面包、煎蛋、煎肉三项同时进行
        public static void MakeBreakfast03()
        {            
            Console.WriteLine("开始做早餐03");
            Stopwatch watch = Stopwatch.StartNew();
            var taskToastBread = ToastBreadAsync();
            var taskFryEggs = FryEggsAsync();
            var taskFryBacon = FryBaconAsync();
            Task.WaitAll(taskToastBread, taskFryEggs, taskFryBacon);
            watch.Stop();
            Console.WriteLine($"早餐03完成,耗时{watch.Elapsed.Seconds}秒");
        }

        // 煎蛋
        public static async Task FryEggsAsync()
        {
            Console.WriteLine("开始煎蛋");
            await Task.Delay(1000);
            Console.WriteLine("煎蛋完成");
        }

        // 煎肉
        public static async Task FryBaconAsync()
        {
            Console.WriteLine("开始煎肉");
            await Task.Delay(1000);
            Console.WriteLine("煎肉完成");
        }

        // 烤面包
        public static async Task ToastBreadAsync()
        {
            Console.WriteLine("开始烤面包");
            await Task.Delay(1000);
            Console.WriteLine("烤面包完成");
        }
    }
}

运行结果:

posted @ 2022-09-12 08:02  广阔之海  阅读(145)  评论()    收藏  举报