C# 中 async 与 await 关键字详解

async await 关键字的作用是使方法能够异步执行并等待异步操作的完成。(最重要的一点是记住 “异步执行”与“等待异步操作完成”,不是等待主线程操作完成)

 async 修饰符可将 方法、lambda 表达式或匿名方法指定为异步。

  1. async 关键字用于声明该方法是异步方法,允许其中使用 await 操作符等待异步操作完成。

  2. await 操作符用于等待异步操作的完成,并将执行控制权返回给调用方,使得线程不会被阻塞。

注意事项:

  • 使用await必须在async方法中:只能在标记为async的方法中使用await关键字。在同步方法中不能直接使用await。
  • 不要在UI线程中使用async和await:长时间运行的任务应该在其他线程上执行,以避免阻塞UI线程,影响用户交互。
  • 理解Task的生命周期:使用async和await时,需要理解Task的生命周期和状态,包括Wait、Result和WaitAsync等方法的使用。

1. 异步方法中的await调用
问题: 在异步方法中直接调用另一个async方法时,应该使用await吗?

解答: 是的,你应该在异步方法中使用await来调用另一个async方法。这样可以确保当前方法等待被调用的异步方法完成,并且能够利用await的优化,例如不会阻塞线程。

 下面是代码示例

    static void Main(string[] args)
    {
        Console.WriteLine("Main thread is running...");
        // 创建一个异步任务
        var task = GetDataAsync();
        // 主线程继续执行其他任务
        Console.WriteLine("Main thread is doing other tasks...");
        // 等待异步任务完成
        task.Wait();
        // 获取异步任务的结果
        string data = task.Result;
        Console.WriteLine("Data received: " + data);
    }
    public static async Task<string> GetDataAsync()
    {
        Console.WriteLine("GetDataAsync started...");
        // 模拟耗时操作
        await Task.Delay(1000);//在这里等待的时间 去执行主线程 "Main thread is doing other tasks"
        Console.WriteLine("GetDataAsync completed...");
        return "Data from server";
    }

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#async和await关键字是用来实现异步编程的。它们的作用是让开发人员能够更方便地处理异步任务。async关键字可以用来修饰方法,表示该方法是一个异步方法,而await关键字用于等待异步任务的完成。 async和await的使用可以帮助我们编写更简洁、易读的异步代码。当我们在一个方法使用了async关键字时,编译器会将该方法转换为一个状态机。这样,当遇到一个耗时的操作时,我们可以使用await关键字来等待该操作完成,而不会阻塞整个线程。当异步操作完成后,代码会继续执行。 async和await的使用需要注意一些细节。首先,异步方法必须返回一个Task对象或Task<T>对象,表示异步操作的结果。其次,在异步方法,可以使用await关键字来等待一个异步操作的完成,但需要在方法的签名声明async关键字。而且,await关键字只能在异步方法使用。 在使用async和await时,还需注意一些原则。首先,尽量避免在异步方法使用阻塞操作,以充分发挥异步编程的优势。其次,可以使用Task.WhenAll或Task.WhenAny等方法来并行处理多个异步任务。另外,可以使用ConfigureAwait方法来配置异步任务的上下文。 总之,C#async和await提供了一种简洁、易读的方式来处理异步任务。通过合理的使用,可以提高代码的性能和可维护性。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值