Hacker News new | ask | show | jobs
by conradludgate 1014 days ago
It's necessary to use some kind of poll construction if you want cancellation and timeouts without shutting down the entire application
2 comments

True but you can still do that using traditional threads using cancellation tokens.

In some ways it's worse because you have to explicitly add them, and I have yet to see any Rust APIs that actually use them (though there is a `cancellation` crate so at least some must be).

In other ways it's better because it gives you control and explicit visibility over the cancellation points.

Do you have a source on these cancellation tokens for threads?

The cancellation crate hasn't been touched since 2016 and requires the running thread have a mechanism to be woken up. If you're in the middle of a read, you won't observe a wakeup unless you use an async-io function that can be timed out or interrupted.

This is no better than async/await. And await is just as obvious of the cancellation points.

That being said, there are also numerous crates for async rust cancellation tokens that can polled in parallel with a read such that you can observed the cancel instantly and switch to a cleanup process instead of immediately cancelling everything

Channel with an additional thread for sleep? Waiting for a channel is not a poll.
You either wait on the channel or wait on a read. How do you manage both?
You wait on a shared channel so both read and sleep threads queue a message when ready (whichever comes first). Not sure about channels, but in other languages it would be a concurrent queue.
This won't cancel the read, it'll just ignore the result
Most languages I know allow killing a thread, or at least unblock a system call.