1 tokio::task_local! { 2 static REQ_ID: u32; 3 pub static FOO: bool; 4 } 5 6 #[tokio::test(flavor = "multi_thread")] local()7async fn local() { 8 let j1 = tokio::spawn(REQ_ID.scope(1, async move { 9 assert_eq!(REQ_ID.get(), 1); 10 assert_eq!(REQ_ID.get(), 1); 11 })); 12 13 let j2 = tokio::spawn(REQ_ID.scope(2, async move { 14 REQ_ID.with(|v| { 15 assert_eq!(REQ_ID.get(), 2); 16 assert_eq!(*v, 2); 17 }); 18 19 tokio::time::sleep(std::time::Duration::from_millis(10)).await; 20 21 assert_eq!(REQ_ID.get(), 2); 22 })); 23 24 let j3 = tokio::spawn(FOO.scope(true, async move { 25 assert!(FOO.get()); 26 })); 27 28 j1.await.unwrap(); 29 j2.await.unwrap(); 30 j3.await.unwrap(); 31 } 32