0
点赞
收藏
分享

微信扫一扫

C# 异步方法的使用场景

小飞侠熙熙 2024-02-17 阅读 6

我一直认为C#的异步方法只是一堆华而不实的东西,坑特别多,比起直接自建线程也没有任何优势。
直到有一天,一个需求场景,让我再次想到了C#的异步方法。

需求场景如下:需要写一个程序控制机械臂完成各种动作。每个动作要同时控制多个关节,而关节的运动需要时间。整套流程需要紧密衔接,一个关节执行完成后另外几个关节才可以运动,一个动作要等待多个关节全部完成它自己的动作。经过思考,我最终还是选择了那个让我之前栽了大跟头的异步方法。

原因嘛,很简单:如果采用老办法直接新建线程,那意味着每执行一个关节都要建立一个线程,最终要管理无数个乱七八糟的线程。不如使用异步方法,让C#自己建立新线程自己管理,我们只需要在代码中指示不同关节任务之间的衔接方式即可。

public static void Main()
{
    // 开展执行某动作 需要运动两个关节
    Task t1 = Run1();
    Task t2 = Run2();
    Task.WaitAll(t1, t2);
    Console.WriteLine("动作执行完成");
    // 继续执行后面其他的动作
}

/// <summary>
/// 异步执行关节1运动的代码
/// </summary>
private static async Task Run1() 
{
    for (int i = 0; i < 6; i++)
    {
        await Task.Delay(1000);
        Console.WriteLine(i);
    }
    Console.WriteLine("关节1运动完成");
}

/// <summary>
/// 异步执行关节2运动的代码
/// </summary>
private static async Task Run2()
{
    for (int i = 0; i < 10; i++)
    {
        await Task.Delay(1000);
        Console.WriteLine(i);
    }
    Console.WriteLine("关节2运动完成");
}
举报

相关推荐

0 条评论