重复执行一个循环,检测某个产品是否为良品,良品不动作,如果为不良品间隔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片是什么意思? 片是产品单位?
能不把问题描述更加具体些,是想实现什么样的需求