接受到信号如何间隔执行循环

重复执行一个循环,检测某个产品是否为良品,良品不动作,如果为不良品间隔14片进行标记为不良品

while循环里判断是否为不良,如果是,用个计数器加1,用个list链表保存id,然后满14个做处理,清空计数器和链表重新计数操作

逻辑上没想通是什么意思。刻舟求剑?划个道道,14米之后从这个道道跳下去?
除非水下暗流比你快,他会在14米以后沉底等着你

算了,俺也不想了。你说啥就是啥把。
环境:net6控制台------框架本身到没啥,rx.net net4.5以上都可以用,特别说明是net6是因为net6的program.cs长的有些特别,倒不是代码不可用
库:rx.net,如果没有请nuget System.Reactive

using System.Reactive.Subjects;
using System.Threading.Tasks;
using System;
using System.Reactive.Linq;


Subject<int> subject = new Subject<int>();

subject.Subscribe(p =>
{
    Console.WriteLine($"观察输出{p}");
});

//验证逻辑,当10为true时候,跳过14个值
subject.Where(p => 排查(p)).Subscribe(p =>
{
    
    Console.WriteLine($"达到判定条件{p}");
    subject.Skip(14).Subscribe(p1 =>
    {//逻辑上p为25开始
        Console.WriteLine($"跳过14个后{p1}");
    });
});


//我不知道你要怎么检测,我先假设等于10预检不合格
//我宁愿叫预检或者排查
bool 排查(int i)
{
    return i == 10;
}

Task.Run(async () =>
{
    //模拟数据,每100ms加1
    int i=0;
    while (true)
    {
        subject.OnNext(i);
        await Task.Delay(TimeSpan.FromMilliseconds(100));
        i++;
    }

});

Console.ReadKey();

我仅仅展示了一下,类似你的要求,我们可以使用可观测数据源方式完成。但是你这个业务逻辑我实在弄不清楚,只能就事论事写当我观察到true后间隔14位开始处理的逻辑(也许你要其他的逻辑,但是我的确不知道是啥)
就我想象中是业务逻辑,可能最有可能的描述是“排查岗排查出有可能有问题,抽查岗每14个抽查一下”这个也许是个可能需求

如果是这样的需求,可以写成

//验证逻辑,当10为true时候
subject.Where(p => 排查(p)).Subscribe(p =>
{
    
    Console.WriteLine($"达到判定条件{p}");
    //这里我换个逻辑,就是后面每14个成一批
    subject.Buffer(14).Subscribe(p1 =>
    {
        Console.WriteLine($"14个一批:{string.Join(",",p1)}");
    });
});

定义一个常量或变量BadMaxCount,值=14
定义一个变量BadCount,值为0
用While/For或什么循环
判断 if 产品不合格
BadCount+=1;
判断是否有14个坏品
if BadCount=BadMaxCount
{
BadCount=0;
满14个做处理,清空计数器和链表重新计数操作;
其它操作;
}

不良品间隔14片 间隔14片是什么意思? 片是产品单位?

能不把问题描述更加具体些,是想实现什么样的需求

【C#的判断、循环及循环控制语句】https://minipro.baidu.com/ma/qrcode/parser?app_key=y1lpwNoOyVpW33XOPd72rzN4aUS43Y3O&launchid=c7ca61cd-1cd2-411c-9b1c-f4cbd1913495&path=%2Fpages%2Fblog%2Findex%3FblogId%3D104209639%26_swebFromHost%3Dbaiduboxapp