gpt4 book ai didi

c# - 调用 Azure ActiveDirectory 时的任务状态 WaitingForActivation

转载 作者:行者123 更新时间:2023-11-30 16:06:29 25 4
gpt4 key购买 nike

我是 C# 中的任务的新手。我正在尝试按照有关将 arm 模板部署到 azure 以启动虚拟机的示例进行操作: https://azure.microsoft.com/en-us/documentation/articles/arm-template-deployment/

此处给出的第一个操作是通过调用 Active Directory 获取授权 token 。链接中给出的代码使用似乎已弃用的 AcquireToken api,目前我只能找到 AcquireTokenAsync。所以我修改了代码来创建一个任务并等待它完成:

private static string GetAuthorizationHeader()
{
ClientCredential cc = new ClientCredential("{application-id}", "{password}");
var context = new AuthenticationContext("https://login.windows.net/{tenant-id}");

Task<AuthenticationResult> acquireTokenTask = context.AcquireTokenAsync("https://management.azure.com/", cc);
Task.WhenAll(acquireTokenTask);
AuthenticationResult result = acquireTokenTask.Result;
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}

string token = result.AccessToken;

return token;
}

我原以为 thatTask.WhenAll 会阻塞,直到 acquireTokenTask 的状态变为“RanToCompletion”。但即使状态为“WaitingForActivation”,WhenAll 也不会阻塞,并且控制会转到下一个语句,尝试获取 acquireTokenTask.Result。这导致异常说明,异常详细信息说明发送请求时出错。

问题:
1.发送状态未变为“RanToCompletion”的请求是否有错误?我不认为是这种情况,因为 10 次运行中有 2-3 次运行成功,状态为“RanToCompletion”,我能够得到结果。
2. 我以为 Task.WhenAll 会阻塞线程直到它运行完成。这不是真的吗?如果为真,我想知道控件是如何传递到下一个语句的。
3. 我怎样才能解决这个问题并在提取结果时每次运行都获得成功的结果?

最佳答案

I thought Task.WhenAll blocks the thread until it runs to completion. Is this not true?

Task.WhenAll 返回一个可等待对象,您需要对其进行await。目前,您传递了 Task 但不等待,这只是让代码继续执行,直到您用 Task.Result 阻止它。虽然,这根本不是 nessacery。 WhenAll 当您有多个需要异步等待的任务时可以使用。在这里,您可以简单地等待单个 Task:

private static async Task<string> GetAuthorizationHeaderAsync()
{
ClientCredential cc = new ClientCredential("{application-id}", "{password}");
var context = new AuthenticationContext("https://login.windows.net/{tenant-id}");

AuthenticationResult result = await context.AcquireTokenAsync(
"https://management.azure.com/", cc);
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}

string token = result.AccessToken;
return token;
}

关于c# - 调用 Azure ActiveDirectory 时的任务状态 WaitingForActivation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32240915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com