Simple WPF: C# 使用基本的async/await实现异步

news/2024/11/18 11:45:27/文章来源:https://www.cnblogs.com/mrchip/p/18292836

最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园。
创作不易,如果觉得有用请在Github上为博主点亮一颗小星星吧!

博主开始学习编程于11年前,年少时还只会使用cincout ,给单片机点点灯。那时候,类似async/awaitfuture/promise 模型的认知还不是很够,因此一直使用着最传统的Thread 模型实现异步。顶多使用ThreadPool 线程池来实现对线程资源的复用。而现在我们有更现代方法,在.net 环境下可以使用现代C# 提供的async/await关键字方便地实现基于任务异步模型的异步调用。

完整代码下载见:Github

一个基本的异步方法

假设我们定义以下这个异步方法模型,在函数上作用async 关键字实现在控制台异步输出字符串。

static async Task FooAsync()
{Console.WriteLine("Foo.");
}

突然发现VS2022的提示说由于没有Task.Run或者await还是同步方法。。。

I0-EBmvhJwdYpy4l2IgLgTg_-sdMogVG296z1DMeBm4.png

根据这个提示我们修改上述的方法使之满足异步方法的要求

static async Task FooAsync()
{Task.Run(() => Console.WriteLine("Foo."));
}

为了展示各种简单的异步方法,我们写了以下的demo来演示

namespace AsyncBasic
{internal class Program{static async Task BasicFuncAsync(){await Task.Run(() => Console.WriteLine("Hello Basic Func Async."));}static async Task LoopFuncAsync(){for (int i = 0; i < 10; i++){Console.WriteLine($"Loop func {i}.");await Task.Delay(100);}}static async Task FooAsync(){Console.WriteLine("Foo.");}static async Task<int> BasicFuncWithRetAsync(){Console.WriteLine("Basic func with return value.");await Task.Delay(1000);return 10086;}static async IAsyncEnumerable<int> GenerateEnumerableAsync(){for (int i = 0; i < 10; ++i){yield return i;await Task.Delay(100);}}static async Task Main(string[] args){Console.WriteLine("Hello Async Basic.");Task task1 = LoopFuncAsync();Task task2 = BasicFuncAsync();Task<int> task3 = BasicFuncWithRetAsync();Task.WaitAny(task2, task3);Console.WriteLine($"Basic Func Async ret value: {task3.Result}");Task.WaitAll(task1, task2, task3);Console.WriteLine($"Generate Enumerable Async");await foreach (int i in GenerateEnumerableAsync()){Console.WriteLine($"Async Enumerable: {i}");}}}
}

值得一提的是C# 8.0以后可以使用await foreach 来消费异步产生的列表

本文展示了基本的异步方法使用,计划后续再撰文记录异步方法的取消功能等更高级话题。

演示效果如下:

CXPqf5-lSiNgih-NJra8IQgv1hFt5mmz-M1LfYTVpcc.gif

参考链接

https://learn.microsoft.com/zh-cn/dotnet/csharp/asynchronous-programming/task-asynchronous-programming-model

https://www.cnblogs.com/cplemom/p/14290789.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/741356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

植物大战僵尸1.2.0.1073汉化版

下载链接:https://download.csdn.net/download/hello_hlqk/89528378?spm=1001.2101.3001.9499 植物大战僵尸是一款益智策略类塔防游戏,玩家通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。不同的敌人,不同的玩法构成五种不同的游戏模式,加之黑夜、…

3-电子支付技术与系统

3.1 电子货币及其职能 3.1.1 电子货币的定义 在电子商务迅速发展和金融电子化的背景下,电子货币成为媒介商品交易的重要工具。电子货币(ElectronicMoney,)是指用一定金额的现金或存款从发行者处兑换并获得代表相同金额的数据或者通过银行及第三方推出的快捷支付服务,通过使…

先有鸡还是先有蛋?这是领域驱动设计落地最大的困局

本文书接上回 《关于领域驱动设计,大家都理解错了》 欢迎关注公众号“老肖想当外语大佬”: https://mp.weixin.qq.com/s/HHJ5vt2_iT0-CFcw0HcPnA 先有鸡还是先有蛋的困局 前文我们提出了“领域驱动设计是一种价值观”这个观点,那么落地领域驱动设计就是践行价值观的过程,实…

2017年,我成为了技术博主

2017年9月,我已经大三了。 >>上一篇(爪哇,我初窥门径) 我大二学了很多java技术,看似我一会就把javaweb/ssh/ssm这些技术栈给学了。 这些技术确实不难,即便是我,我都能学会,门槛并不高。 但是,这也不是能随便百度学学,10分钟就懂了,学会了。 从理解技术的用途,…

一起了解自定义流程表单开发的主要优势

低代码技术平台、自定义流程表单开发的主要优势特点表现在哪来?当前,想要进行流程化办公,应用专业的软件平台产品是非常重要的。低代码技术平台拥有可视化操作界面、很灵活、易维护等优势特点,可以应用于很多中小型流程化办公中。那么,低代码技术平台、自定义流程表单开发…

[NodeJS] JavaScript模块化

这篇文章介绍了JavaScript模块化的发展历程及各种方案,包括IIFE、CommonJS、AMD、CMD、UMD及ESM。对比了各方案的特点和优缺点。同时,深入剖析了Node.js中CommonJS的模块加载机制。JavaScript诞生于1995年,一开始只是用于编写简单的脚本。 随着前端开发任务越来越复杂,Java…

论文阅读: 面向Planning的端到端智驾Planning-oriented Autonomous Driving

设计一个更优的、可理解的、面向最终目标的框架。基于这个面向Planning的思想,他们提出了 Unified Autonomous Driving (UniAD)方案,一种新的自动驾驶框架。这个方案从全局视角出发,让智驾的各个模块特征提取可以互相补充,各个任务之间可以通过统一的查询接口通信。在此基础…

基于FileZilla上传、下载服务器数据的方法

本文介绍FileZilla软件的下载、配置与使用方法~本文介绍FileZilla软件的下载、配置与使用方法。在之前的博客中,我们提到了下载高分遥感影像数据需要用到FTP(文件传输协议,File Transfer Protocol)软件FileZilla;这一软件用以在自己的电脑与服务器之间相互传输数据,在进行…

text1

sad das dasdasdgrdgt是g天热共同的sgtd发广泛的撒旦撒撒大大大叔

TextCNN: Convolutional Neural Networks for Sentence Classification

本文是CNN应用在NLP领域的开山之作。TextCNN的成功并不是网络结构的成功,而是通过引入已经训练好的词向量在多个数据集上达到了超越benchmark的表现,证明了构造更好的embedding,是提升NLP各项任务的关键能力。作者做了一系列实验,这些实验使用卷积神经网络(CNN)在预训练的…

Matlab图片的处理

上一章我们介绍了奇异值分解的理论原理,这一章我们使用奇异值分解来压缩图片 目录一、RGB模式(1) 灰色图片与彩色图片二、matlab进行图片压缩1.参数分析2.读取图像文件并进行转换3.进行奇异值分解4.将压缩后的图片保存5.实例演示(1)原图:(2)进行处理(3)处理后————保…

AI绘图实践-用人工智能生图助力618大促

现在各种AI大模型大行其道,前有GhatGPT颠覆了我们对对话型AI的原有印象,后有Sora文生视频,让我们看到了利用AI进行创意创作的无限可能性。如今各大公司和团队都争相提出自己的大模型,各种网页端和软件应用也极大地降低了我们使用AI作为生产力的门槛。 我这次就为大家带来使…