编辑
2025-09-24
C#
00

目录

摘要
正文

摘要

使用C#的异步编程可以非常方便地完成下载文件的功能。异步编程是指一种编程模型,其中某些操作不会阻塞程序的执行,而是在异步线程中执行。这种方式可以提高程序的性能,并且可以避免阻塞其他操作的执行。在下载文件的情境下,使用异步编程可以保证下载进程的顺利进行,而不会导致整个程序的崩溃。

正文

不带返回例子

C#
internal class Program { static async Task Main(string[] args) { await DownloadHtmlAsync("http://www.baidu.com", "baidu.txt"); } static async Task DownloadHtmlAsync(string url, string filename) { using (HttpClient client = new HttpClient()) { string html = await client.GetStringAsync(url); await File.WriteAllTextAsync("./" + filename, html); } } }

修改成带返回

C#
static async Task Main(string[] args) { var len= await DownloadHtmlAsync("http://www.baidu.com", "baidu.txt"); Console.WriteLine(len); } static async Task<int> DownloadHtmlAsync(string url, string filename) { using (HttpClient client = new HttpClient()) { string html = await client.GetStringAsync(url); await File.WriteAllTextAsync("./" + filename, html); return html.Length; } }

image.png

用winform实现

C#
private async void btnDownload_Click(object sender, EventArgs e) { await DownloadFile("http://www.baidu.com", "baidu.txt"); } private async Task DownloadFile(string url, string filename) { using (HttpClient client = new HttpClient()) { var html = await client.GetStringAsync(url); await File.WriteAllTextAsync("./" + filename, html); } }

这里注意click事件前的void不能修改成Task

image.png

如果遇到不在在调用程序中使用async,可以用Wait()(无返回值)Result(有返回值)。风险:死锁,尽量不用。

image.png

C#
private void btnRun_Click(object sender, EventArgs e) { int count = 0; ThreadPool.QueueUserWorkItem((obj) => { while (true) { count++; this.Invoke(new Action(() => { txtValue.Text = count.ToString(); })); Thread.Sleep(100); } }); }

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!