Some context
You just tried to compile your Rust project and got the there is no timer running, must be called from the context of Tokio runtime
error?
You are desesperatly trying to understand what is going on?
So did I!
For future reference, my project relied on tokio v0.3. I added a dependency (bollard) that was relying on tokio v0.2.
Even when my code was in the execution context of a tokio runtime (v0.3) calling bollard code triggered at runtime the there is no timer running, must be called from the context of Tokio runtime
error.
How do I fix this?
Option 1: start a new runtime in tokio v0.2
Your first option would be to start another runtime in the same tokio version that your dependency requires, something like:
use tokio::runtime::Runtime;
// Create the runtime
let rt = Runtime::new().unwrap();
// Spawn a future onto the runtime
rt.block_on(async {
// call your dependency
});
That would result in two threadpools so it might be an issue in some case. I did not go down this path
Option 2: use the same version that your dependency
It's the easiest option. Downgrade your tokio project dependency to v0.2 so it can be the same as your dependency. But yep, it sucks.
Option 3: send a patch to the dependency
Last option (and the best one) is to create and send a patch to your dependency project to upgrade its tokio version.