Futures had a concept of a current task, with task-local data, just as you’re describing. The task can be moved to different threads. However, the proposed changes to Future for libstd removed the task::current()
ability (now, it’s just a “waker”, and must be passed as an argument, you cannot ask for the current one like you can a thread), and task-local data.