C# GetAsync挂起在.net Framework 4.7.2中,但不挂起在4.6.2中
下面的函数调用一个API。到目前为止,我已经在一个使用.NETFramework 4.6.2的网站上使用了它。现在我必须在使用.net framework 4.7.2的站点中使用它,但现在它在调用后挂起:httpresponsemessageresponse=wait client.GetAsync(apirl+“lists/”+listID+“/members?filter[email][eq][=”+email) 我错过了什么C# GetAsync挂起在.net Framework 4.7.2中,但不挂起在4.6.2中,c#,.net,api,C#,.net,Api,下面的函数调用一个API。到目前为止,我已经在一个使用.NETFramework 4.6.2的网站上使用了它。现在我必须在使用.net framework 4.7.2的站点中使用它,但现在它在调用后挂起:httpresponsemessageresponse=wait client.GetAsync(apirl+“lists/”+listID+“/members?filter[email][eq][=”+email) 我错过了什么 using (var client =
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(BaseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var apiKey = "hiddenkey";
var apiSecret = "hiddensecret";account
var apiUrl = "hiddenurl";
var timeStamp = DateTime.Now.ToString("R");
var hmacsha256 = new System.Security.Cryptography.HMACSHA256(System.Text.Encoding.UTF8.GetBytes(apiSecret));
hmacsha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(timeStamp.ToString()));
var hashstring = BitConverter.ToString(hmacsha256.Hash).Replace("-", "").ToLower();
var requestSignature = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(hashstring));
var authorizationString = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(apiKey + ":" + requestSignature));
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authorizationString);
client.DefaultRequestHeaders.Add("X-Request-Timestamp", timeStamp);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
HttpResponseMessage response = await client.GetAsync(apiUrl + "lists/" + listID + "/members?filter[email][eq][]=" + email);
if (response.IsSuccessStatusCode)
{
return null;
}
}
return null;
}
请在代码所在的位置张贴方法签名。您是否遵循了异步等待模式直到最高级别?或者你在某个时候混合了同步和异步处理吗?我混合了同步和异步处理,但在4.6.2版本中我也这样做。这会导致死锁,你能不能用所有方法发布调用层次结构,只显示它在哪里是
async
,在哪里不是“我混合了同步和异步处理”-这从来都不是一个好主意,而且有很好的文档证明它能够导致死锁,特别是当您正在执行“异步同步”,即访问.Result
或.Wait()
。那么:客户端.GetAsync(…)
是否可能使用“异步同步”“内部?因为是的,这可能会导致僵局。它在框架之间的行为不同这一事实很有趣(这表明了同步上下文的差异),但是:如果您依赖于未定义的行为,那么结果允许在版本之间更改,甚至只在周二更改,最快、可能也是最简单的解决方案是在整个调用层次结构中采用异步方法。我建议这样做,请张贴在这个代码所在的方法签名。您是否遵循了异步等待模式直到最高级别?或者你在某个时候混合了同步和异步处理吗?我混合了同步和异步处理,但在4.6.2版本中我也这样做。这会导致死锁,你能不能用所有方法发布调用层次结构,只显示它在哪里是async
,在哪里不是“我混合了同步和异步处理”-这从来都不是一个好主意,而且有很好的文档证明它能够导致死锁,特别是当您正在执行“异步同步”,即访问.Result
或.Wait()
。那么:客户端.GetAsync(…)
是否可能使用“异步同步”“内部?因为是的,这可能会导致僵局。它在框架之间的行为不同这一事实很有趣(这表明了同步上下文的差异),但是:如果您依赖于未定义的行为,那么结果允许在版本之间更改,甚至只在周二更改,最快、可能也是最简单的解决方案是在整个调用层次结构中采用异步方法。我建议这样做