mirror of
				https://github.com/tokio-rs/tokio.git
				synced 2025-11-03 14:02:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			33 lines
		
	
	
		
			997 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			997 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// This example shows how to use the tokio runtime with any other executor
 | 
						|
//
 | 
						|
//It takes advantage from RuntimeExt which provides the extension to customize your
 | 
						|
//runtime.
 | 
						|
 | 
						|
use tokio::net::TcpListener;
 | 
						|
use tokio::runtime::Builder;
 | 
						|
use tokio::sync::oneshot;
 | 
						|
use tokio_util::context::RuntimeExt;
 | 
						|
 | 
						|
fn main() {
 | 
						|
    let (tx, rx) = oneshot::channel();
 | 
						|
    let rt1 = Builder::new_multi_thread()
 | 
						|
        .worker_threads(1)
 | 
						|
        // no timer!
 | 
						|
        .build()
 | 
						|
        .unwrap();
 | 
						|
    let rt2 = Builder::new_multi_thread()
 | 
						|
        .worker_threads(1)
 | 
						|
        .enable_all()
 | 
						|
        .build()
 | 
						|
        .unwrap();
 | 
						|
 | 
						|
    // Without the `HandleExt.wrap()` there would be a panic because there is
 | 
						|
    // no timer running, since it would be referencing runtime r1.
 | 
						|
    rt1.block_on(rt2.wrap(async move {
 | 
						|
        let listener = TcpListener::bind("0.0.0.0:0").await.unwrap();
 | 
						|
        println!("addr: {:?}", listener.local_addr());
 | 
						|
        tx.send(()).unwrap();
 | 
						|
    }));
 | 
						|
    futures::executor::block_on(rx).unwrap();
 | 
						|
}
 |