基本的な概念の確認のために自作してみました。 簡便化のために select, epoll は使わず、メインスレッドでイベントループ動かし、wakerはmpsc経由で別スレッドから投げます。 タスクを定義する タスクとは一連の Future のチェーンです。 Future を spawn するときに発生します。 今回はタスクを Future<Output = ()> のような値を返さないものとして定義しました。 use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll, Waker}; /// タスクはアウトプットのない BoxFuture struct Task { future: Pin<Box<dyn Future<Output = ()> + 'static>>, } impl Task { f