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

目录

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

一、简述

特点:

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

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

二、测试代码

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

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.hqwc.cn/news/327720.html

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

相关文章

leetcode——杨辉三角

https://leetcode.cn/problems/pascals-triangle/ 杨辉三角&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 核心思想&#xff1a;找出杨辉三角的规律&#xff0c;发…

PromptCast:基于提示学习的时序预测模型!

目前时序预测的SOTA模型大多基于Transformer架构&#xff0c;以数值序列为输入&#xff0c;如下图的上半部分所示&#xff0c;通过多重编码融合历史数据信息&#xff0c;预测未来一定窗口内的序列数值。 受到大语言模型提示工程技术的启发&#xff0c;文章提出了一种时序预测新…

FastDFS实战

目录 目标 版本 环境 官方文档 相关概念 安装FastDFS 启动FastDFS 关闭FastDFS 重启FastDFS 用命令测试上传文件 用命令测试下载文件 用命令测试删除文件 用HTTP的方式访问FastDFS中的文件 用HTTP的方式访问FastDFS中的文件整体流程 目标 在Linux服务器上搭建Fa…

二分查找算法(指定数值的左右边界)

之前一直以为二分查找有什么难的&#xff0c;不就是确定左右边界&#xff0c;然后while循环求mid&#xff0c;大于mid的找右半边&#xff0c;小于mid的找左半边。直到最后相同了就是最后查找的结果了. 后来等真正用到二分查找算法的时候&#xff0c;发现问题远没有这么简单&…

代码随想录算法训练营第二十天| 回溯 理论基础 77. 组合

理论基础 回溯是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯&#xff0c;回溯函数也是递归函数&#xff0c;指的是一个函数。 回溯法并不是什么高效的算法。因为回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#…

回顾基础--HTML篇

HTML语法规范 <html></html> 开始标签与结束标签 <br /> 单标签 包含关系 <head><title></title> </head>并列关系 <head></head> <body></body> 1、 标题标签 标题标签 【双标签】 <h1> ~ &…

Linux离线安装MySQL(rpm)

目录 下载安装包安装MySQL检测安装结果服务启停MySQL用户设置 下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 下载全量包如&#xff1a;(mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar) 解压&#xff1a;tar -xzvf mysql-8.1.0-1.el7.x86_64.…

18.标题统计

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();int res 0;for(int i0;i<str.length();i) {char c str.charAt(i);if(c! && c!\n) {res;}}System.o…

【Docker】创建,查看,进入容器

目录 方式一&#xff1a; 创建 查看 ​编辑 方式二&#xff1a; 创建 查看 进入容器 方式一&#xff1a; 首先查看有什么镜像 创建 docker run -i -t --namefreedom centos:7 /bin - i 表示容器一直运行着&#xff0c;容器如果没有客户端连接就会关闭&#xff0c;加了…

【动态规划】【字符串】C++算法:140单词拆分

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 字符串 LeetCode140:单词拆分 II 给定一个字符串 s 和一个字符串字典 wordDict &#xff0c;在字符串 s 中增加空格来构建一个句子&#xff0c;使得句子中所有的单词都在词典中。以任意顺序 返回…

【2058错误】sql软件链接数据库 mysql 报错误2058

【2058错误】sql软件链接数据库报错误2058 操作&#xff1a;仅需在mysql登陆之后运行一行代码即可&#xff1a;注意1.后面必须是%&#xff0c;而不是别人说的 localhost2.此处的password是你自己的mysql密码。 操作&#xff1a;仅需在mysql登陆之后运行一行代码即可&#xff1a…

AI与5G、IDC等成为数字经济的重要基础设施

AI与5G、IDC等已经成为数字经济的重要基础设施&#xff0c;它们的影响和作用不容忽视。随着技术的迅速发展&#xff0c;AI在各行各业都得到了广泛应用&#xff0c;并成为数字经济的核心驱动力之一。 首先&#xff0c;AI的兴起为数字经济带来了巨大的机遇。AI技术可以帮助企业从…