2017-04-18 69 views
2

我認爲.for_each()會做的伎倆,但它只返回渠道的第一個(未來)項目,然後返回,如果通道是空的。在非Tokio /未來上下文中,無限期地讀取任務中的頻道的方式是.for_each()如何無限期讀取Rust 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

歡迎來到Stack Overflow!如果您提供[MCVE],您的問題將更有可能在合理的時間內回答。就像現在一樣,你要求*每個*潛在的回答者從頭開始構建一個完整的程序,**猜測你所顯示的每個變量的類型。 – Shepmaster

回答

1

for_each處理方式是最好的方法,應該工作 - 它的工作原理!在Gitter的tokio-rs人員(謝謝!)的幫助下,通過簡單的測試代碼將它調試成tx端的問題。

在我看來,Rust是如此先進,以至於在這種情況下它確實知道要放棄這項任務:基於此的日誌記錄輸出令我困惑,實際上認爲問題出現在rx端,雖然它是tx方面的問題一直。