异步任务方法 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
。
我的项目是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
。