pub fn bounded_tx_blocking_rx_future<T>(size: usize) -> (TxBlocking<T, SharedSenderBRecvF>, RxFuture<T, SharedSenderBRecvF>) {
    let (tx, rx) = crossbeam::channel::bounded(size);
    let shared = Arc::new(SharedSenderBRecvF::new());

    let tx_b = TxBlocking::new(tx, shared.clone());
    let rx_f = RxFuture::new(rx, shared);
    (tx_b, rx_f)
}
/// Initiate a bounded channel that sender is blocking, receiver is sync
Initiate a bounded channel that sender is blocking, receiver is sync
Initiate a bounded channel that sender is blocking receiver is sync
pub fn bounded_tx_blocking_rx_future<T>(size: usize) -> (TxBlocking<T, SharedSenderBRecvF>, RxFuture<T, SharedSenderBRecvF>) {
    let (tx, rx) = crossbeam::channel::bounded(size);
    let shared = Arc::new(SharedSenderBRecvF::new());
    let tx_b = TxBlocking::new(tx, shared.clone());
    let rx_f = RxFuture::new(rx, shared);
    (tx_b, rx_f)
}
pub fn bounded_tx_blocking_rx_future < T > ( size : usize ) -> ( TxBlocking < T , SharedSenderBRecvF > , RxFuture < T , SharedSenderBRecvF > ) { let ( tx , rx ) = crossbeam :: channel :: bounded ( size ) ; let shared = Arc :: new ( SharedSenderBRecvF :: new ( ) ) ; let tx_b = TxBlocking :: new ( tx , shared . clone ( ) ) ; let rx_f = RxFuture :: new ( rx , shared ) ; ( tx_b , rx_f ) }
Initiate a bounded channel that sender is blocking, receiver is sync
Initiate a bounded channel that sender is blocking receiver is sync
size
usize
size
usize