ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/17 9:00:31 拓冰建站 浏览量
C#不会循环响应的Action设计与实现

目录

  • 简述
  • 测试代码
  • 测试的输出
  • 核心代码
    • 获取途径1
    • 获取途径2
  • 其它

简述

特点:

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

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

测试代码

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

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}}}}
}

测试的输出

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

核心代码

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

获取途径1

请添加图片描述

获取途径2

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

其它

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

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

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