首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SendAsync正在阻塞UI线程

SendAsync正在阻塞UI线程
EN

Stack Overflow用户
提问于 2019-05-07 20:23:39
回答 1查看 777关注 0票数 2

试图将我的部分程序转换为异步http客户端调用。取出部分代码(如下所示)进行测试。基本上是一个非阻塞的异步按钮(据我所知) SendAsync()。它不应该阻止UI线程,我是正确的吗?它仍然阻止它的原因,我目前无法看到。

我花了两天时间想弄清楚到底出了什么问题。我实现了非阻塞文件,写日志和电子邮件发送功能,他们正确地工作。

有人能指出我做错了什么吗?

代码语言:javascript
复制
private async void button2_Click(object sender, EventArgs e)
    {
    NetworkCredential differentCredToPass = new NetworkCredential("user", "*****", "domain");
    WebProxy wcProxy = new WebProxy("1.1.1.1", 8080);
    wcProxy.UseDefaultCredentials = false;
    wcProxy.Credentials = differentCredToPass;
    var httpHandler = new HttpClientHandler();
    httpHandler.UseProxy = true;
    httpHandler.UseDefaultCredentials = false;
    httpHandler.Proxy = wcProxy;
    using(HttpClient httpClient = new HttpClient(httpHandler) )
        {
        try
            {
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://cisco.Com");
            HttpResponseMessage response = await httpClient.SendAsync(request);
            textBox1.AppendText(response.StatusCode.ToString() + Environment.NewLine);
            }
        catch (Exception ex)
            {
            textBox1.AppendText(ex.Message.ToString() + Environment.NewLine);
            throw;
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-07 21:01:56

非阻塞(据我所知) SendAsync()

好吧,是和不是。不幸的是,由于历史原因,SendAsync并不是纯异步的。具体来说,它同步执行DNS查找和代理解析。因此,要使这个完全非阻塞,您需要将该调用包装在一个Task.Run中。

代码语言:javascript
复制
HttpResponseMessage response = await Task.Run(() => httpClient.SendAsync(request));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56029988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档