gpt4 book ai didi

c# - 为什么异步方法不立即返回可等待对象?

转载 作者:太空狗 更新时间:2023-10-30 00:31:30 25 4
gpt4 key购买 nike

我曾认为这是一种合理的模式,可用于在事件处理程序中异步调用 WebClient DownloadData:

private async void button1_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
//wc.Proxy = null;
byte[] bytes = await wc.DownloadDataTaskAsync("http://www.google.com");
label1.Text = Encoding.ASCII.GetString(bytes);
}

但我发现 DownloadDataTaskAsync 在返回之前阻塞了大约 5 秒(除非 wc.Proxy = null 语句未被注释)。如果一个方法可以在返回任务之前随心所欲地执行重要的工作,那么等待方法有什么意义呢?

大概这意味着为了安全起见,我应该永远不会像上面那样调用 xAsync 方法,而是应该始终自己将它们包装在 Task.Run() 中以确保安全。还是不行?

最佳答案

这是 WebClient/HttpWebRequest 的一个已知问题:代理和 DNS 查找始终同步完成。这是一个错误,但出于向后兼容性的原因,微软几乎决定不修复它。

我首先推荐的是使用HttpClient。如果这不起作用并且您需要异步,那么您可以将调用包装在 Task.Run 中。

关于c# - 为什么异步方法不立即返回可等待对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25427274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com