pub fn bounded_tx_future_rx_blocking<T: Unpin>(size: usize) -> (TxFuture<T, SharedSenderFRecvB>, RxBlocking<T, SharedSenderFRecvB>) {
    let (tx, rx) = crossbeam::channel::bounded(size);
    let shared = Arc::new(SharedSenderFRecvB::new());

    let tx_f = TxFuture::new(tx, shared.clone());
    let rx_b = RxBlocking::new(rx, shared);
    (tx_f, rx_b)
}
/// Initiate a bounded channel that sender is async, receiver is blocking
Initiate a bounded channel that sender is async, receiver is blocking
Initiate a bounded channel that sender is async receiver is blocking
pub fn bounded_tx_future_rx_blocking<T: Unpin>(size: usize) -> (TxFuture<T, SharedSenderFRecvB>, RxBlocking<T, SharedSenderFRecvB>) {
    let (tx, rx) = crossbeam::channel::bounded(size);
    let shared = Arc::new(SharedSenderFRecvB::new());
    let tx_f = TxFuture::new(tx, shared.clone());
    let rx_b = RxBlocking::new(rx, shared);
    (tx_f, rx_b)
}
pub fn bounded_tx_future_rx_blocking < T : Unpin > ( size : usize ) -> ( TxFuture < T , SharedSenderFRecvB > , RxBlocking < T , SharedSenderFRecvB > ) { let ( tx , rx ) = crossbeam :: channel :: bounded ( size ) ; let shared = Arc :: new ( SharedSenderFRecvB :: new ( ) ) ; let tx_f = TxFuture :: new ( tx , shared . clone ( ) ) ; let rx_b = RxBlocking :: new ( rx , shared ) ; ( tx_f , rx_b ) }
Initiate a bounded channel that sender is async, receiver is blocking
Initiate a bounded channel that sender is async receiver is blocking
size
usize
size
usize