2017-04-18 15 views
2

私は.for_each()がトリックを行うと仮定しましたが、チャンネルから最初の(将来の)項目のみを返し、チャンネルが空であれば戻ります。 .for_each()が非Tokio /将来のコンテキストで行うように、タスクのチャネルを無期限に読み取る方法は何ですか?錆びたTokioタスクで無期限に無制限のチャネルを読み取る方法はありますか?

let tx_origs_reader = rx_chan.for_each(move |tx_orig| { 
    //save receiver side tx to db 
    let mut tx_origs_once = tx_origs_inner.borrow_mut(); 
    tx_origs_once.push(tx_orig.clone()); 
    Ok(()) 
}); 
handle.spawn(tx_origs_reader.then(|err| { 
    println!("This returns after first item without an error {:?}", err); 
    Ok(()) 
})); 
+0

ようこそスタックオーバーフロー! [MCVE]を提供すると、あなたの質問は、合理的な時間内に返答される可能性が高くなります。今のように、それぞれの回答者が最初から完全なプログラムを構築する必要があります** **あなたが示したすべての変数の型を推測します**。 – Shepmaster

答えて

1

for_eachの処理方法が最善の方法です。動作する必要があります。簡単なテストコードを使ってGitter(感謝!)のtokio-rsの助けを借りて、tx側で問題をデバッグしました。

Rustは非常に高度なので、実際にこの場合はタスクを落とすことを知っていたようです。この問題に基づいてログ出力が実際にrx側にあると思うのは混乱しています。ずっと。

関連する問題