Вызов асинхронного метода в тупике Net3.5
Я использую.net3.5 и у меня установлено следующее Эта операция зависает. Может кто-нибудь сказать мне, что я должен делать по-другому?
HttpClient Client;
response = await Client.SendAsync(request, cancellationToken).ConfigureAwait(false);
У меня был свой проект в Net4.0 раньше, и та же строка кода работала со следующими библиотеками.
Мне нужно было перейти на Net3.5, и теперь мой асинхронный вызов зависает со статусом ответа WaitingForActivation
,
Я также только что понял, что следующие работы:
var response = await _client.GetAsync(Url, cancellationToken).ConfigureAwait(false);
Также возвращает значение в response.Results. Может быть, что-то происходит с SendAsync в библиотеке?
После дальнейшего расследования я понимаю, что для следующего
var request1 = new HttpRequestMessage(HttpMethod.Post, new Uri("http://localhost:7000/connect/token"));
var request2 = new HttpRequestMessage(HttpMethod.Post, new Uri("http://localhost:7000/connect/token"))
{
Content = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("grant_type", "client_credentials"),
new KeyValuePair<string, string>("scope", "hq_api_access")
})
};
var response1 = await client.SendAsync(request1).ConfigureAwait(false);
var response2 = await client.SendAsync(request2).ConfigureAwait(false);
request2
висит. Я предполагаю, что это ошибка в библиотеке, которая возникает, когда объект запроса установлен с содержимым. Есть ли другой клиент, который я могу использовать? для платформы.net 3.5, если нет спасения.
Минимальный, полный и проверяемый пример Как предлагается в комментарии ниже. Я создал пример, чтобы повторить проблему. Я использую Visual Studio 2015. Создано новое консольное приложение.net3.5.
Я установил следующее 1. Install-Package Rackspace.HttpClient35 -Pre 2. Install-Package TunnelVisionLabs.Threading -Pre
Ниже показано, как выглядит основная программа
class Program
{
static void Main(string[] args)
{
var r = Demo();
var a = r.Result;
}
public static async Task<HttpResponseMessage> Demo()
{
var client = new HttpClient();
var request1 = new HttpRequestMessage(HttpMethod.Post,
new Uri("https://demo.identityserver.io/connect/token"));
var request2 = new HttpRequestMessage(HttpMethod.Post,
new Uri("https://demo.identityserver.io/connect/token"))
{
Content = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("grant_type", "client_credentials"),
new KeyValuePair<string, string>("scope", "api")
})
};
var response1 = await client.SendAsync(request1).ConfigureAwait(false);
var response2 = await client.SendAsync(request2).ConfigureAwait(false);
return response1;
}
}
Когда я отлаживаю с помощью breakpionts, response1 возвращает ответ, но response2 зависает.