How can i terminate a tokio task even if its not finished

tokio::spawn is conceptually same as thread::spawn. Like threads, force shutdown tasks externally is not supported. But you can wrap the inner future itself with futures::future::select with another future that can accept external signal. If the signalling future completes, the other future will be dropped and should cancel all its pending tasks.

let (sender, receiver) = tokio::sync::oneshot::channel();
tokio::spawn(futures::future::select(get_task(), receiver.map_err(drop)));
sender.send(()); // this will cancel the task