泉州做网站设计公司,推荐网站建设服务话术,唐山网络运营推广,网站设计学习网一、 为什么需要异步编程 异步点餐的优点#xff1a;能同时服务多个客人
异步点餐一定会提升单个客户点餐速度吗#xff1f; 答案理所当然#xff1a;不能
图片美化服务例子服务器能够同时服务的请求数量有限
void BeautifyPic (File photo, Response response)
{byte[] …一、 为什么需要异步编程 异步点餐的优点能同时服务多个客人
异步点餐一定会提升单个客户点餐速度吗 答案理所当然不能
图片美化服务例子服务器能够同时服务的请求数量有限
void BeautifyPic (File photo, Response response)
{byte[] bytes 美化图片(photo);response.Write(bytes):
} 处理完成后再回调异步回调通知的。就可以同时处理更多的请求
传统多线程开发太麻烦。C#关键字; async、await。async、await不等于“多线程
二、async await 基本使用
“异步方法”:用async关键字修饰的方法 1、异步方法的返回值一般是TaskT是真正的返回值类型Task。惯例: 异步方法名字以Async结尾。 2、即使方法没有返回值也最好把返回值声明为非泛型的Task。 3、调用泛型方法时一般在方法前加上await关这样拿到的返回值就是泛型指定的T类型 4、异步方法的“传染性”:一个方法中如果有await调用则这个方法也必须修饰为async其他都是同步方法只要有一句异步这个方法就必须修饰未async
static async Task Main(string[] args)
{string fileName d:/1.txtFile.Delete(fileName);File.WriteAllTextAsync(fileName, hello async);string s await File.ReadAllTextAsync(fileName);Console.Writeline(s);
}
试一试异步
新建控制台应用 同步方式 运行结果 异步方式
此时主方法需要改为 若去掉await 此时文件 也能生成留下疑问 读取的两种方式 第一种会自动转换是第二种的两句合并 不加await 运行效果 是因为 写入hello 字符得速度很快 尝试加入 大字符
运行
WriteAllTextAsync 独占式写入正在写的途中是不能 读出数据 不写await 是启动写入后不等写完 就继续执行下面的语句
因为第二行代码是异步可能会先于第一行执行要么都异步要么都同步
加入await之后
运行结果
三、编写异步方法
不带返回值 运行 查看文件
带返回值 运行结果 【注意】 如果同样的功能既有同步方法又有异步方法那么首先使用异步方法。 .NET5中很多框架中的方法也都支持异步Main、WinForm事件处理函数。
对于不支持的异步方法怎么办 Wait()无返回值Rest(有返回值)。 风险死锁。尽量不用
winform中 异步方法得使用
同步方式 运行结果
异步方式 运行结果 会报错winform 委托函数已经规定了 返回值必须是void
修改会void 运行结果
对于不支持异步得情况
假如说 只能调用异步的方法Main 又不支持异步
result 方式 运行结果
await会暂时退出当前函数result是阻塞当前线程
wait 方式 运行结果
异步委托
ThreadPool.QueueUserWorkItem(async(obj) {
await SomeAsync();
});测试 运行 异步方式 修改异步的
运行结果