pub fn unbounded_future<T: Unpin>() -> (TxUnbounded<T>, RxUnbounded<T>) {
    let (tx, rx) = crossbeam::channel::unbounded();
    let shared = Arc::new(UnboundedSharedFuture::new());

    let tx_f = TxBlocking::new(tx, shared.clone());
    let rx_f = RxFuture::new(rx, shared);
    (tx_f, rx_f)
}
/// Initiate a unbounded channel.
/// Sender will never block, so we use the same TxBlocking for threads
Initiate a unbounded channel.
Sender will never block, so we use the same TxBlocking for threads
Initiate a unbounded channel . Sender will never block so we use the same TxBlocking for threads
pub fn unbounded_future<T: Unpin>() -> (TxUnbounded<T>, RxUnbounded<T>) {
    let (tx, rx) = crossbeam::channel::unbounded();
    let shared = Arc::new(UnboundedSharedFuture::new());
    let tx_f = TxBlocking::new(tx, shared.clone());
    let rx_f = RxFuture::new(rx, shared);
    (tx_f, rx_f)
}
pub fn unbounded_future < T : Unpin > ( ) -> ( TxUnbounded < T > , RxUnbounded < T > ) { let ( tx , rx ) = crossbeam :: channel :: unbounded ( ) ; let shared = Arc :: new ( UnboundedSharedFuture :: new ( ) ) ; let tx_f = TxBlocking :: new ( tx , shared . clone ( ) ) ; let rx_f = RxFuture :: new ( rx , shared ) ; ( tx_f , rx_f ) }
Initiate a unbounded channel.
Initiate a unbounded channel .