异步任务方法 returns 在其中一个等待任务执行后立即执行而不继续执行下一个任务

Async task method returns right after one of it await tasks executed without proceeding to next task

我的项目是MVC.net 4.7.2。控制器操作方法调用一系列方法。其中一种方法是调用 Microsoft Graph API 内置异步方法。当该方法执行时,它 return 会快速处理其余代码。

下面是“result = await app.AcquireTokenForClient(scopes)”执行和return.

时的代码
   public string AddRequest(List<names> collections)
    {    //removed some code here
             email.SendEmailSimpleEmail();    
    }

  public  async Task SendEmailSimpleEmail()
    {
        //var token = await GetGraphAccessToken();
        // With client credentials flows

        var app = ConfidentialClientApplicationBuilder.Create(clientId)
       .WithClientSecret(clientSecret)
       //.WithTenantId(tenant)
       .WithAuthority(authority)
       .Build();

        string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

        AuthenticationResult result = null;
        try
        {
                           result = await 
           app.AcquireTokenForClient(scopes).
            ExecuteAsync();
            

            var graphClient = new GraphServiceClient(
          new DelegateAuthenticationProvider(
              async (requestMessage) =>
              {
                  requestMessage.Headers.Authorization =
                      new AuthenticationHeaderValue("Bearer", result.AccessToken);
              }));
  //removed the rest of the code and also the try and catch block too
   }

所有 awaitables 都需要等待。

在异步方法中,代码同步运行,直到第一个 await 未完成的 awaitable

这就是执行到达调用 app.AcquireTokenForClient(scopes).ExecuteAsync() 时发生的情况。

因为 awaitable 尚未完成,该方法的执行被中断,控制权返回给调用方法。

因为调用方法(AddRequest)没有等待SendEmailSimpleEmail返回的Task,所以继续执行,执行退出AddRequest