首页 新闻 赞助 找找看

异步HttpClient的问题,一直在等待。

0
悬赏园豆:10 [待解决问题]

现在想对SendAsync变成同步方法。

通过SendAsync("http://www.baidu.com").Result;

却一直在等待

public ActionResult Test()
        {
            var s = SendAsync("http://www.baidu.com").Result;
            return Content(s.Msg);
        }


        public async Task<AjaxResponase> SendAsync(string url)
        {
            var http = new WebApiClient();
            return await http.GetAsync<AjaxResponase>(url);
        }

        private async Task<TResult> GetAsync<TResult>(string url, int? timeout = null) where TResult : class, new()
        {
            using (var client = new HttpClient())
            {
                using (var response = await client.GetAsync(url))
                {
                    if (!response.IsSuccessStatusCode)
                    {
                        throw new Exception("Could not made request to " + url + "! StatusCode: " +
                                            response.StatusCode + ", ReasonPhrase: " + response.ReasonPhrase);
                    }

                    var ajaxResponse =
                        JsonString2Object<TResult>(await response.Content.ReadAsStringAsync());


                    return ajaxResponse;
                }
            }
        }
View Code
sky_net的主页 sky_net | 初学一级 | 园豆:10
提问于:2015-09-17 15:45
< >
分享
所有回答(3)
0

ASP.NET里调用的这个代码?,不死锁才怪。

拉风的拉灯 | 园豆:585 (小虾三级) | 2015-09-17 16:00

没明白你说的.能详细吗

支持(0) 反对(0) sky_net | 园豆:10 (初学一级) | 2015-09-17 16:01

@jakeys: http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html,如果你想同步,请不要调用异步的方法,直接调用同步的方法即可。

支持(0) 反对(0) 拉风的拉灯 | 园豆:585 (小虾三级) | 2015-09-29 13:08
0

Test方法改成试试:

public async Task<ActionResult> Test()
{
    var s = await SendAsync("http://www.baidu.com").Result;
    return Content(s.Msg);  
}

 

jackccc | 园豆:1341 (小虾三级) | 2015-09-17 16:19

谢谢你的回答,这样是可以的,但是我想把SendAsync变成同步的方法,在不改动GetAsync的前提下.怎么做呢

支持(0) 反对(0) sky_net | 园豆:10 (初学一级) | 2015-09-17 16:35
0

试试回调

稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-18 09:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册