The underlying implementation sets the task as cancelled the first time it is polled, and then waits for it to stop running [0]. So you could just call `cancel` and poll the future once:
futures::poll!(task.cancel());
[0]: https://docs.rs/async-task/4.0.3/src/async_task/task.rs.html...