It sounds like you are looking for the Handle type. The difference between handle.spawn(...) and tokio::spawn(...) is that tokio::spawn can only be used inside an async fn, whereas handle.spawn(...) can be used anywhere.
The core_threads argument doesn't do anything unless you turn on threaded_scheduler. The threaded scheduler uses a fixed number of threads, and core_threads can change the default number of threads.
thread 'tokio-runtime-worker' panicked at 'there is no timer running, must be called from the context of Tokio runtime', /home/cery/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.21/src/time/driver/handle.rs:24:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.', /home/cery/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.21/src/runtime/enter.rs:38:5
i don't know where this is appear, can you tell me how to debug it?