Я пытался заставить две задачи (сопрограммы) взаимодействовать, но безуспешно. Ниже то, что у меня есть. Я никогда не вижу printlns ни из функций источника, ни из функций приемника, и кажется, что вызов wait () зависает навсегда. Я также попытался сделать задачу p (источник) глобальной переменной, вместо того, чтобы передавать ее в раковину () в качестве аргумента, но это тоже, похоже, не работает (даже когда я объявляю ее внутри синке () как глобальную.
Я обнаружил, что это то, что я могу очень легко делать с каналами и горутинами в Go.
Я также экспериментировал с вызовом yieldto () внутри функций source () иink (), но, похоже, я все еще захожу в тупик.
У кого-нибудь есть пример того, как несколько задач каким-либо образом обмениваются данными? В идеале у меня был бы конвейер или длинная цепочка задач.
Заранее спасибо за помощь.
println("Hello")
function source()
println("source start")
produce("start")
produce("stop")
end
function sink(p::Task)
println("sink start")
println(consume(p))
println(consume(p))
end
a = Task( source )
b = Task( () -> sink(a) )
wait(b)
wait(a)
println("Goodbye")