static Producer moveProducerToNewThread(Producer producer, int bufferSize default 65536) {
if (producer == null) null;
new SimpleCircularBuffer buffer;
new Flag done;
new Var error;
startThread(r {
try {
A a;
while ping ((a = producer.next()) != null) {
while (buffer.isFull()) sleep(1);
buffer.add(a);
} catch e {
error.set(e);
} finally {
done.raise();
}
});
ret () -> {
while true {
A a = buffer.popFirst();
if (a != null) ret a;
if (done.isUp())
null;
else
sleep(1);
}
};
}