2017-04-18 7 views
2

나는 .for_each()이 트릭을한다고 가정하지만 채널에서 첫 번째 (미래) 항목 만 반환 한 다음 채널이 비어 있으면 반환합니다. .for_each()이 아닌 Tokio/future 컨텍스트에서 수행 할 작업에서 무한정 채널을 읽는 방법은 무엇입니까?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

스택 오버플로에 오신 것을 환영합니다! 귀하가 [MCVE]를 제공하면 귀하의 질문은 합리적인 시간 내에 답변 될 가능성이 더 높습니다. 지금 당장은 각 잠재 응답자가 처음부터 완전한 프로그램을 구성해야합니다 ** ** 표시된 모든 변수의 유형을 추측합니다 **. – Shepmaster

답변

1

처리의 for_each 방법이 최선의 방법입니다, 작동합니다 - 그것은 작동한다! 간단한 테스트 코드로 tokio-rs 사람들의 도움을 받아 tx 측에서 문제가되는 것이 디버깅되었습니다 (감사합니다!).

녹이 너무 진전되어 실제로이 경우 작업을 중단한다는 것을 알았습니다 : 로깅 출력은 실제로 문제가 rx쪽에 있다고 생각하기에 혼란 스럽습니다. 모두 함께.