Par*_*rma 5 c# webclient async-await
最近正在尝试使用 c# 进行异步和等待。这是我的代码
private async void button1_Click( object sender, EventArgs e )
{
textBox1.Text = string.Empty;
var client = new WebClient();
var sw = Stopwatch.StartNew();
var downloadStringTask = client.DownloadStringTaskAsync("http://www.google.com");
textBox1.Text += "Downloading string async "+sw.ElapsedMilliseconds;
sw.Restart();
await downloadStringTask;
textBox1.Text += Environment.NewLine + "Downloaded "+sw.ElapsedMilliseconds;
sw.Stop();
}
Run Code Online (Sandbox Code Playgroud)
这是我在 textbox1.text 中获得的输出
Downloading string async 5698
Downloaded 666
Run Code Online (Sandbox Code Playgroud)
这意味着只调用DownloadStringTaskAsync()
正在5.6 Seconds
执行的实际下载<1 second
。当使用此方法的原因是为了节省线程资源。
如果这是真的,是否有任何实际情况应该使用 WebClient 类的这种方法?或者我只是在用完全不正确的术语思考?
我第一次得到大约 300 毫秒,之后每次都是 0 毫秒。关于我所期望的。当您第一次使用代码时,总会有大量的开销。您至少要衡量将 System.Net 代码加载到程序中并初始化的成本。WebClient 似乎也有一些开销,例如,当它在注册表中查找 Web 代理时,我看到一个异常被捕获并处理。在异步执行某些操作之前需要完成的基本操作。
不过,5.7 秒仍然是一个很长的时间。你应该关注环境因素,当你做一些互联网的事情时,你的机器的其他部分想要参与其中。与该 Web 代理一样,它可能会设置为自动配置,这需要时间。或者就像您的反恶意软件软件或防火墙对您开始使用出站 IP 地址感到兴奋一样。诸如此类,网络涉及许多移动部件,而且它永远不会相同。