具有授权令牌的连续识别与Microsoft.CognitiveServices.Speech异步

时间:2019-04-11 05:17:45

标签: asp.net .net

我正在使用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))

1 个答案:

答案 0 :(得分:0)

由于您使用的是.Result或.Wait或await,因此最终会导致代码死锁。

您可以在异步方法中使用ConfigureAwait(false)来防止死锁

像这样:

响应=等待客户端。PostAsync(uri,RoleContent).ConfigureAwait(false); 您可以在不阻止异步代码的情况下尽可能使用ConfigureAwait(false)。