请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

消费者感觉有问题,生产者生产的0,消费者没有消费到。

课程demo例子日志结果如下:send 0 和receive 0没有成对出现,缺少receive 0换句话说消费者没有消费0。从代码上可以看出,第一次调用消费者consumer.resume(0),消费者协程还没有开启此时调用previousStatus.continuation.resume(Unit)开启协程然后调用yield,此时协程回到了main方法中,继续调用生产者生产出1,伺此后消费者才会调用 (previousStatus as Status.Yielded

).continuation.resume(value)回到消费者协程消费但此时消费的是1.可能我理解的不对,麻烦讲师解答下。

pool-1-thread-1 :send 0
pool-2-thread-1 :start 0
pool-1-thread-1 :send 1
pool-2-thread-1 :receive 1
pool-1-thread-1 :send 2
pool-2-thread-1 :receive 2
pool-1-thread-1 :send 3
pool-2-thread-1 :receive 3
pool-2-thread-1 :receive 200

正在回答

3回答

第一次调用的时候是作为函数参数的呀,不然start 0是哪儿来的呢?

0 回复 有任何疑惑可以回复我~
  • 提问者 昨日重现1596341 #1
    0作为函数参数,其他的值通过yield给消费者的,我当时只认为yield返回并日志输出才作为消费过程,0作为函数参数可以理解成第一个被消费的。通过resume给消费者的数据处理方式不太一样所以产生误解
    回复 有任何疑惑可以回复我~ 2020-05-23 10:59:14
qq_随心_HJKZ07 2020-05-28 11:22:15

您好,我已购买课程,请问有q 群或者代码资源赠送吗

0 回复 有任何疑惑可以回复我~
  • 提问者 昨日重现1596341 #1
    课程首页右边有QQ群信息:QQ群:644173029
    资源在imooc的git仓库,在课程首页,第二个TAB下载
    回复 有任何疑惑可以回复我~ 2020-05-28 21:15:53
bennyhuo 2020-05-22 23:58:51

你的理解应该是对的。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信