C# GetAsync挂起在.net Framework 4.7.2中,但不挂起在4.6.2中

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 =

下面的函数调用一个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 = 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(…)
是否可能使用“异步同步”“内部?因为是的,这可能会导致僵局。它在框架之间的行为不同这一事实很有趣(这表明了同步上下文的差异),但是:如果您依赖于未定义的行为,那么结果允许在版本之间更改,甚至只在周二更改,最快、可能也是最简单的解决方案是在整个调用层次结构中采用异步方法。我建议这样做