C#不会循环响应的Action设计与实现

news2024/11/19 2:19:14

目录

  • 一、简述
  • 二、测试代码
  • 三、测试的输出
  • 四、核心代码
  • 五、其它

一、简述

特点:

  • 不光是能防止直接的死循环调用;
  • 还能防止间接的死循环调用;
  • 还支持对不同参数判定,不同参数的调用可以不当循环调用;

消息事件系统中必备,拒绝死循环
简明、高效、实用
其它编程语言也可以参考实现

二、测试代码

测试代码只为展示组件功能,也完美的展示组件功能。测试用例是完全的

using UnityEngine;

namespace Main
{
    /// <summary>
    /// 将脚本挂到一个空对象上即可测试
    /// </summary>
    public class SimpleTest_NonLoopAction : MonoBehaviour
    {
        private void Start()
        {
            // 测试逻辑: [->A ->A]
            Logic01.Run();

            // 测试逻辑:[->A ->B ->C ->A]
            Logic02.Run();

            // 测试逻辑:[->A ->A(1) ->A(1,2) ->A(1,2,3) ->A(1)]
            // (注:中间相同的消息但参数不一样,只有出现一样的参数的消息,都会中断)
            Logic03.Run();
        }

        static class Logic01
        {
            static NonLoopAction _nonLoopActionA;

            /// <summary>
            /// 执行逻辑 [->A ->A]
            /// </summary>
            public static void Run()
            {
                Debug.Log("===== Logic01: [->A ->A] ===========");
                _nonLoopActionA = new NonLoopAction(OnResponseA, "A消息响应者", true);
                _nonLoopActionA.Invoke();
            }
            static void OnResponseA(params object[] args)
            {
                Debug.Log("==> On Response A");
                _nonLoopActionA.Invoke();
            }
        }

        static class Logic02
        {
            static NonLoopAction _nonLoopActionA;
            static NonLoopAction _nonLoopActionB;
            static NonLoopAction _nonLoopActionC;

            /// <summary>
            /// 执行逻辑:[->A ->B ->C ->A]
            /// </summary>
            public static void Run()
            {
                Debug.Log("===== Logic02: [->A ->B ->C ->A] ===========");
                _nonLoopActionA = new NonLoopAction(OnResponseA, "A消息响应者", true);
                _nonLoopActionB = new NonLoopAction(OnResponseB, "B消息响应者", true);
                _nonLoopActionC = new NonLoopAction(OnResponseC, "C消息响应者", true);
                _nonLoopActionA.Invoke();
            }
            static void OnResponseA(params object[] args)
            {
                Debug.Log("==> On Response A");
                _nonLoopActionB.Invoke();
            }
            static void OnResponseB(params object[] args)
            {
                Debug.Log("==> On Response B");
                _nonLoopActionC.Invoke();
            }
            static void OnResponseC(params object[] args)
            {
                Debug.Log("==> On Response C");
                _nonLoopActionA.Invoke();
            }
        }

        static class Logic03
        {
            static NonLoopAction _nonLoopActionA;

            /// <summary>
            /// 执行逻辑:[->A ->A(1) ->A(1,2) ->A(1,2,3) ->A(1)]
            /// (注:中间相同的消息但参数不一样,只出现一样的参数的消息,都会中断)
            /// </summary>
            public static void Run()
            {
                Debug.Log("===== Logic03: [->A ->A(1) ->A(1,2) ->A(1,2,3) ->A(1)] ===========");
                _nonLoopActionA = new NonLoopAction(OnResponseA, "A消息响应者", true);
                _nonLoopActionA.Invoke();//A
            }
            static void OnResponseA(params object[] args)
            {
                Debug.Log("==> On Response A");
                int args_count = args.Length;
                if (args_count == 0)
                {
                    _nonLoopActionA.Invoke(1);//A(1)
                }
                else if (args_count == 1)
                {
                    _nonLoopActionA.Invoke(1,2);//A(1,2)
                }
                else if (args_count == 2)
                {
                    _nonLoopActionA.Invoke(1,2,3);//A(1,2,3)
                }
                else if (args_count == 3)
                {
                    _nonLoopActionA.Invoke();//A
                }
            }
        }
    }
}

三、测试的输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、核心代码

这是本人在几十个中大型中商业项目中使用的组件,高效稳定,放心拍下来,学习与使用。
绝对原创、尊重原创
赏点零花钱 2元
请添加图片描述

【淘宝】https://m.tb.cn/h.5oRdsNlaKTEquN5?tk=awCzWhaDRoQ CZ0001 「C#不会循环响应的Action设计与实现」
点击链接直接打开 或者 淘宝搜索直接打开

五、其它

只是正如前面所说的这是消息事件系统中必备,消息事件系统又一框架中核心的必备系统之一。
不日将发出我的一个完整的消息事件系统。

测试代码只为展示组件功能,也完美的展示组件功能。

在我的“消息事件系统”中,将展示它与系统的完全结合,尽请期待…

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习笔记——C++运算符之逻辑运算符

作用&#xff1a;用于根据表达式的真值返回真值或假值 逻辑运算符有以下符号&#xff1a; #include<bits/stdc.h> using namespace std; int main(){// 逻辑运算符 非 !int a10;//在c中&#xff0c;除了0均是真 cout<<!a<<endl;//0 cout<<!!a<<…

2023年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536 输入 第一行1个整数n,分别表示序列的长度。(0 < n ≤…

SpringSecurity深度学习

SpringSecurity简介 spring Security是什么&#xff1f; Spring Security 是一个强大且高度可定制的身份验证和访问控制框架&#xff0c;用于保护基于Spring的应用程序。它是Spring项目的一部分&#xff0c;旨在为企业级系统提供全面的安全性解决方案。 一个简单的授权和校验…

idea2023连接gitee远程仓库

目录 1.在gitee创建远程仓库 2.在Idea里配置git 3.初始化本地仓库 4. 提交推送至远程仓库 注意&#xff1a;提前下好git工具、idea2023&#xff0c;注册gitee账号&#xff0c;本文不介绍 1.在gitee创建远程仓库 创建好后&#xff0c;复制远程仓库地址 2.在Idea里配置git ​ …

分布式【Zookeeper】

1.1 ZooKeeper 是什么 ZooKeeper 是 Apache 的顶级项目。ZooKeeper 为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面&#xff0c;ZooKeeper 并没有直接采用 Paxos 算法&…

视图与索引连表查询(内/外联)和子查询

目录 一、视图 1.1、概念&#xff1a; 1.2、场景&#xff1a; 1.3、用视图的意义 1.2、创建(增加)视图 1.3、修改视图 1.4、删除视图 1.5、查看视图 ​编辑 二、索引 2.1、概念 2.2、优缺点 优点&#xff1a; 缺点&#xff1a; 2.3、应用场景 2.4、会失效 2.5、…

项目框架构建之3:Nuget服务器的搭建

本文是“项目框架构建”系列之3&#xff0c;本文介绍一下Nuget服务器的搭建&#xff0c;这是一项简单的工作&#xff0c;您或许早已会了。 1.打开vs2022创建Asp.net Web应用程序 框架选择.net framework4.8&#xff0c;因为nuget服务器只支持.net framework。 2.选择空项目和保…

Docker nginx容器代理播放m3u8视频文件(HLS)

文章目录 Docker Nginx容器代理播放M3U8文件教程获取Nginx Docker镜像设置Nginx配置文件用 ffmpeg 将 MP4 文件转换成 m3u8 文件运行Docker容器测试M3U8流其他问题我用vlc都能播放http://192.168.121.50/forest4kTest.m3u8和http://192.168.121.50/forest4kTest.mp4&#xff0c…

如何安装和使用夜神模拟器连接Android Studio

目录 简介 一、安装 二、使用 三、更多资源 简介 夜神模拟器是一款在Windows平台上运行的Android模拟器软件。它能够模拟Android操作系统环境&#xff0c;让用户在电脑上轻松体验Android应用程序。夜神模拟器的功能强大&#xff0c;可以满足各种需求&#xff0c;无论是娱乐…

QT----Visual stdio翻金币案例,附源码

历经一个月&#xff0c;各种事情磕磕绊绊&#xff0c;终于结束了&#xff0c;自己还是太菜了 案例的文档写的教程已经很详细&#xff0c;这边主要是记录一些问题 github代码 gitee代码 1、图片无法加载 一开始加载首页图片和标题出不来&#xff0c;结果是paintEvent重写的字打…

【LMM 014】NExT-GPT:能够输入和生成任意模态的多模态大模型

论文标题&#xff1a;NExT-GPT:Any-to-Any Multimodal Large Language Model 论文作者&#xff1a;Shengqiong Wu, Hao Fei*, Leigang Qu, Wei Ji, Tat-Seng Chua 作者单位&#xff1a; NExT Lab, National University of Singapore 论文原文&#xff1a;https://arxiv.org/abs…

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于正负1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 笔者的一些话(写在最前面)&#xff1a; 这是一篇小文&#xff0c;是我写的关于求解矩阵行列式的一篇文章中的一部分。之所以把这一段专门提溜出来&#xff0c;是因为这一段相对于原文是可以完全独立的&#xff0c;也是因为我…

RocketMQ 投递消息方式以及消息体结构分析:Message、MessageQueueSelector

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

条件竞争之文件上传

一、条件竞争介绍 条件竞争,在程序员日常的Web应用开发中&#xff0c;通常不如其他漏洞受到的关注度高。因为普遍的共识是&#xff0c;条件竞争是不可靠的&#xff0c;大多数时候只能靠代码审计来识别发现&#xff0c;而依赖现有的工具或技术很难在黑盒灰盒中识别并进行攻击。…

精进单元测试技能 —— Pytest断言的艺术!

本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。 了解断言的基础 在Pytest中&#xff0c;断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等&#xff0c;例如&#…

小游戏实战丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容&#xff1a;基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…

ENVI 各版本安装指南

ENVI下载链接 https://pan.baidu.com/s/1APpjHHSsrXMaCcJUQGmFBA?pwd0531 1.鼠标右击【ENVI 5.6(64bit&#xff09;】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 ENVI 5.6(64bit&#xff09;】。 2.打开解压后的文件夹&#xff0c…

一些想法:关于行人检测与重识别OIMLoss

本文主要是介绍我们录用于 ECCV18 的一个工作&#xff1a;Person Search via A Mask-guided Two-stream CNN Model. 这篇文章着眼于 Person Search 这个任务&#xff0c;即同时考虑行人检测&#xff08;Pedestrian Detection&#xff09;与行人重识别&#xff08;Person Re-ide…

2024PMP考试新考纲-【人员领域】近期典型真题和超详细解析(5)

今天华研荟继续为您分享PMP新考纲下的【人员People领域】近年真题&#xff0c;帮助大家举一反三&#xff0c;一次性通过2024年的PMP考试。 2024年PMP考试新考纲-【人员领域】真题解析21 题&#xff1a;项目经理正在为一个项目工作。该项目由于人员流动&#xff0c;相关方登记册…

Matlab二维绘图

低级绘图命令line 有什么点就点哪里&#xff0c;然后连起来&#xff0c;没什么细节&#xff0c;不光滑&#xff0c;所以基本不会用到。 x0:0.2*pi:2*pi; ysin(x); line(x,y);%画一条sin函数线 line([-5,5],[2,2]);%画一条水平线 line([5,5],[0,2]);%画一条竖线 高级绘图命令…