生产者消费者模型,能将“消费”的数据返回给生产者吗

tengxinhengye 2017-01-01 09:21:37
问题背景:
1.winform,c/s,Sqlserver2008,c#
2.客户端打印模块,需要在工单内生成一个流水号,即工单111111内每个产品的流水号是1,2,3……,
工单222222内每个产品的流水号也是1,2,3,4……,工单内流水号不能重复,每个工单的流水号都是从1开始计数
3.现在,A和B两个客户端同时为工单111111打印标签,要求:A和B客户端打印出的流水号绝不能重复

目前思路:
1.建立服务端程序
2.模拟生产者消费者模型,解决并发问题
3.A客户端点击打印(打印事件中new了一个packLable实体对象,包括工单号,批次号,流水号等)
4.服务端收到A客户端打印请求,将packLable插入数据库,并在插入时生成流水号
如果当前数据库中最大号是1,那么新生成的流水号就是2
5.A和B客户端同时点击,将来甚至会出现更多客户端

问题:上面的第4条中生成的流水号2,请返回给触发打印的客户端A,如何返回?
只有A客户端时还行,客户端一旦大于1,如何返回给“生产”自己的那个客户端

补充:如果大家有生产者消费者之外的更好的解决方式,也可以说一下,第一次发帖,感谢指点
...全文
296 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tengxinhengye 2017-01-01
  • 打赏
  • 举报
回复
引用 7 楼 D56233577的回复:
和生产者、消费者有什么关系么,标题党。
为啥说没关系,注明理由
D56233577 2017-01-01
  • 打赏
  • 举报
回复
和生产者、消费者有什么关系么,标题党。
tengxinhengye 2017-01-01
  • 打赏
  • 举报
回复
大概用代码描述下需求: public void f(PackLabel pack)//这个方法用来接收客户端的对象 { lock (obj) { Qrequest.Enqueue(pack); } } public void insert()//这个方法用来完成插入数据库操作 { while (!exit) { if (Qrequest.Count > 0) { Add(Qrequest.Dequeue()); //插入成功后,希望add方法能返回id,但是这个id要返回给A客户端,因为刚刚插入的是A客户端发送的pack } } }
tengxinhengye 2017-01-01
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
[quote=引用 楼主 tengxinhengye 的回复:] 补充:如果大家有生产者消费者之外的更好的解决方式,也可以说一下,第一次发帖,感谢指点
如果你能看到更高层面的问题,脚踏实地运用概念,而不是陷在诡异的那些看似“高大上”的概念里边,就会彻底解决类似问题。[/quote] 我觉得在服务端用这个模式去解决问题,诱惑力很大啊 多个客户端给服务端那个队列传同类型的实体对象 服务端做好并发
tengxinhengye 2017-01-01
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你这个是滥用模式概念,它不能给你什么东西,让你脑子秀逗。 你写客户端程序,那么你的客户端用什么方式跟服务器通讯?你用什么调用方式,就有什么“返回结果”的机制。 把一个极端初级的问题扯到“模式”上,结果你连模仿入门书上最简单的例子程序的代码都不会设计了。这就是模式病。
1.WebService或msmq,或者还有别的 2.假如我现在选择了WebService,它里面应该有个insert的方法,insert方法的参数是个实体对象packLabel 这个实体对象又是从队列里取出的。问题是怎么把insert方法的返回值和packLabel的发送者联系上 3.其实我想实现的就是,A和B两个客户端同时打印标签时,流水号不要重复
  • 打赏
  • 举报
回复
引用 楼主 tengxinhengye 的回复:
补充:如果大家有生产者消费者之外的更好的解决方式,也可以说一下,第一次发帖,感谢指点
如果你能看到更高层面的问题,脚踏实地运用概念,而不是陷在诡异的那些看似“高大上”的概念里边,就会彻底解决类似问题。
  • 打赏
  • 举报
回复
你这个是滥用模式概念,它不能给你什么东西,让你脑子秀逗。 你写客户端程序,那么你的客户端用什么方式跟服务器通讯?你用什么调用方式,就有什么“返回结果”的机制。 把一个极端初级的问题扯到“模式”上,结果你连模仿入门书上最简单的例子程序的代码都不会设计了。这就是模式病。
tengxinhengye 2017-01-01
  • 打赏
  • 举报
回复
祝大家:新年快乐
tengxinhengye 2017-01-01
  • 打赏
  • 举报
回复
生产者“们”都是不同的线程,消费者只有一个线程,然后每次消费一项都马上给它的生产者反馈“消费信息” 模型是异步的,但是实时反馈信息好像只有同步才能做到吧 这个方向思考下去,是不是条死路

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧