C# async-await循环依赖梳理

C#的async声明的函数内可以使用await,await的函数又需要async声明的函数,感觉两者互为对方的前提条件,是个死循环。

常见demo实现方式:

1、winform或wpf控件事件加上async

2、Task.Run内的委托函数声明为async可以在内部使用await(结合第1条,委托可以接受async函数,也可接受无async的函数)

cs 复制代码
        private void button14_Click(object sender, EventArgs e)
        {
            var t = Task.Factory.StartNew(async () =>
            {
                var v = await AsyncTest();
                Debug.WriteLine($"{v}");
                var v2 = await AsyncTest();
                Debug.WriteLine($"{v}-{v2}");
                var v3 = await AsyncTest();
                Debug.WriteLine($"{v}-{v2}-{v3}");
                return v + v2 + v3;
                //Thread.Sleep(5000);
            });
            //var res = t.GetAwaiter().GetResult();  //Task内委托为async类型,已无法使用GetAwaiter阻塞住异步过程
            //Debug.WriteLine($"{res}");
        }

        private async Task<int> AsyncTest()
        {
            return await Task.Factory.StartNew(() =>
            {
                Thread.Sleep(3000);
                return 1;
            });
        }
相关推荐
70asunflower13 小时前
堆与栈:C 语言内存管理的核心概念
c语言·开发语言
wjs202413 小时前
Rust 输出到命令行
开发语言
xingpanvip13 小时前
星盘接口开发文档:日返比接口指南
开发语言·lua
初心未改HD13 小时前
Go语言Goroutine与Channel深度解析
开发语言·golang
SilentSamsara13 小时前
Python 并发基础:threading/GIL 与 multiprocessing 的选型逻辑
服务器·开发语言·数据库·vscode·python·pycharm
FreeGo~13 小时前
手撕C++】内存管理:感受C++的魅力吧
开发语言·c++
m0_6403093013 小时前
解决 Python 报错:ModuleNotFoundError: No module named ‘pkg_resources’
开发语言·python
编码浪子13 小时前
Rust 1.95 稳定版解读与生态新动向
开发语言·后端·rust
asdzx6713 小时前
告别手动校对:使用 Python 对比两个 PDF 文档的差异
开发语言·python·pdf
Rust研习社13 小时前
Rust 操作 Redis 从入门到生产级应用
开发语言·redis·后端·rust