我正在使用Microsoft.CognitiveServices.Speech
进行连续同步。在连续同步过程中需要令牌。当我使用此方法访问令牌时,它可以与控制台应用程序正常工作。如果我在.NET Web应用程序中应用相同的方法,则它永远不会重新运行令牌。需要你的帮助。
我已经尝试过控制台应用程序,它可以正常工作。
// Gets an authorization token by sending a POST request to the token service.
public static async Task<string> GetToken(string subscriptionKey, string region)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
UriBuilder uriBuilder = new UriBuilder("https://" + region + ".api.cognitive.microsoft.com/sts/v1.0/issueToken");
using (var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null))
{
if (result.IsSuccessStatusCode)
{
return await result.Content.ReadAsStringAsync();
}
else
{
throw new HttpRequestException($"Cannot get token from {uriBuilder.ToString()}. Error: {result.StatusCode}");
}
}
}
}
在这一点之后,它永远不会返回。使用(var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null))
答案 0 :(得分:0)
由于您使用的是.Result或.Wait或await,因此最终会导致代码死锁。
您可以在异步方法中使用ConfigureAwait(false)来防止死锁
像这样:
响应=等待客户端。PostAsync(uri,RoleContent).ConfigureAwait(false); 您可以在不阻止异步代码的情况下尽可能使用ConfigureAwait(false)。