我正在使用.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.安装包Rackspace.HttpClient35 -Pre 2.安装包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会挂起。