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;
            });
        }
相关推荐
jimy15 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
码云数智-园园5 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言
en.en..5 小时前
竖线 |:管道、按位或、掩码组合
java·开发语言
techdashen6 小时前
Go Map 详解:键值对实际上是如何存储的
开发语言·后端·golang
程序猿乐锅6 小时前
【计算机组成原理 | 第六章】中央处理器 CPU
java·开发语言
Terra.K6 小时前
ThreadLocal解决一个线程里面跨层传递问题
java·开发语言·后端
变与不变8067 小时前
引用类型、内存原理与对象
开发语言·前端·javascript
wuyk5557 小时前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习
weixin_440730507 小时前
socket解决多次输入问题-大数据接收问题-模块动态导入
java·开发语言·servlet
励志不掉头发的内向程序员7 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互