#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) везде, где это возможно, чтобы не блокировать асинхронный код .