Непрерывное распознавание с помощью токена авторизации, синхронизированного с Microsoft.Когнитивные сервисы.Речь

#asp.net #.net

#asp.net #.net

Вопрос:

Я использую Microsoft.CognitiveServices.Speech для непрерывной синхронизации. В процессе непрерывной синхронизации требуется токен. Когда я использую этот метод для доступа к токену, он отлично работает с консольным приложением. Если я применяю тот же метод в веб-приложении .NET, он никогда не перезапускает токен. Нужна ваша помощь. Я пробовал с консольным приложением, оно работает нормально.

 // 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:

Поскольку вы используете .Result или .Подождите или подождите, это приведет к тупиковой ситуации в вашем коде.

вы можете использовать ConfigureAwait(false) в асинхронных методах для предотвращения взаимоблокировки

вот так:

Ответ = ожидает клиента.PostAsync(uri, RoleContent).ConfigureAwait(false); вы можете использовать ConfigureAwait(false) везде, где это возможно, чтобы не блокировать асинхронный код .