# Propagating span context across threads
Ambient span properties are not shared across threads by default. This context needs to be fetched and sent across threads manually:
```rust
# extern crate emit;
# fn my_operation() {}
std::thread::spawn({
let ctxt = emit::Frame::current(emit::ctxt());
move || ctxt.call(|| {
// Your code goes here
})
});
```
This same process is also needed for async code that involves thread spawning:
```rust
# extern crate emit;
# mod tokio { pub fn spawn(_: impl std::future::Future) {} }
# fn main() {
tokio::spawn(
emit::Frame::current(emit::ctxt()).in_future(async {
// Your code goes here
}),
);
# }
```
Async functions that simply migrate across threads in work-stealing runtimes don't need any manual work to keep their context across those threads.