1.基础概念
- 异步编程是一种编程范式,其核心思想是通过创建单独的线程来处理耗时操作,这样可以确保主线程不会被阻塞,从而使得程序能够在进行耗时操作的同时继续执行其他代码。
- 异步编程不一定能提示程序效率。
- 使用系统提供的异步方法对系统并发量的提升有很大帮助。
- 例:下图服务器使用异步方法接收到用户请求之后立即转发给web程序,从而接收更多请求,但是程序处理速度不一定会变快。
2.基础语法
- 异步方法:使用async修饰。
- 异步方法中,async,await一起出现,称为异步方法具有传染性。
- 例:
- 使用同步方法写入与读出字符串:
namespace yiBuBianCheng
{
internal class Program
{
static void Main(string[] args)
{
//创建一个txt文件
string filename = @"H:\yb\1.txt";
//将字符串写入txt文件
File.WriteAllText(filename, "hello");
//读出写入的字符串
string s = File.ReadAllText(filename);
//控制台输出
Console.WriteLine(s);
}
}
}
- 使用异步方法读出字符串:
//声明异步方法
static async Task Main(string[] args)
{
string filename = @"H:\yb\1.txt";
//使用异步方法写入字符串
await File.WriteAllTextAsync(filename, "hello");
//取出task中的字符串
string s = await File.ReadAllTextAsync(filename);
}
Console.WriteLine(s);
- await会自动将返回的Task中的值取出。
3.自定义异步方法
- .netCore对已定义好的方法基本都提供了异步方法,关键字为在方法后加上Async。
- 例:
- 自定义异步方法解析网址内容:
//使用async声明异步方法。并设置返回值为task
static async Task Main(string[] args)
{
//调用DownloadAsync方法
await DownloadAsync("https://www.csdn.net", @"H:\yb\1.txt");
//方法完成时输出OK
Console.WriteLine("OK");
}
//定义名为DownloadAsync的异步方法
static async Task DownloadAsync(string url, string filename)
{
//创建httpClient对象
using (HttpClient httpClient = new HttpClient())
{
//使用GetStringAsync方法解析网址内容
string html = await httpClient.GetStringAsync(url);
//将字符串写入文件
await File.WriteAllTextAsync(filename, html);
}
}
- 打开1.txt可得到网址内容:
4. 结束总结
.net core对异步方法的编写比较完善,尽量使用异步方法。注:winform中异步方法调用返回值不能改为task。