zoukankan      html  css  js  c++  java
  • C#的async和awaiit的一些记录

    一,最近在学习abp的东西。发现其中作者在获取数据时,大量的使用了async和awaiit。好吧,因为不太懂,所以网上搜搜,在这里记录一下。

    先来看一段代码。调用UpdateUserAsync会返回一个Task,那task是个啥呢。根据腾飞(Jesse)的说法,task是async和awaiit的叔叔。

     protected virtual async Task UpdateUserAsync(CreateOrUpdateUserInput input)
            {
    
                var user = await UserManager.FindByIdAsync(input.User.Id.Value);
    
             
    
                if (!input.User.Password.IsNullOrEmpty())
                {
                    CheckErrors(await UserManager.ChangePasswordAsync(user, input.User.Password));
                }
    
                CheckErrors(await UserManager.UpdateAsync(user));
    
                //Update roles
                CheckErrors(await UserManager.SetRoles(user, input.AssignedRoleNames));
    
                if (input.SendActivationEmail)
                {
                    user.SetNewEmailConfirmationCode();
                    await _userEmailer.SendEmailActivationLinkAsync(user, input.User.Password);
                }
            }

    二,运行机制

    async标记会告诉编辑器接下来的方法可能会用到异步,当然并不一定会有用到,一直向下到awaite这是会等待,await 不会开启新的线程,当前线程会一直往下走直到遇到真正的Async方法(比如说HttpClient.GetStringAsync),这个方法的内部会用Task.Run或者Task.Factory.StartNew 去开启线程。也就是如果方法不是.NET为我们提供的Async方法,我们需要自己创建Task,才会真正的去创建线程。

    大概就是这样欢迎批评指正

    参考

    https://www.cnblogs.com/jesse2013/p/async-and-await.html#realawait

    https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/index

  • 相关阅读:
    带掩码的自编码器MAE详解和Pytorch代码实现
    联邦学习(Federated Learning)详解以及示例代码
    SIMILAR:现实场景中基于子模块信息度量的主动学习
    BERT 模型的知识蒸馏: DistilBERT 方法的理论和机制研究
    为什么 Pi 会出现在正态分布的方程中?
    快到周五了
    土豆
    忙碌的周末
    周五了
    写给妹妹的祝福语
  • 原文地址:https://www.cnblogs.com/tianjiaxiaobaicai/p/7885799.html
Copyright © 2011-2022 走看看