nio 0.1.4

Async runtime for Rust
Documentation
use nio_task::{JoinHandle, Task};
use std::sync::Arc;

use crate::rt::context::RuntimeContext;

pub struct Scheduler {
    runtime_ctx: Arc<RuntimeContext>,
}

impl nio_task::Scheduler for Scheduler {
    fn schedule(&self, task: Task) {
        self.runtime_ctx.send_task_to_least_loaded_worker(task);
    }
}

impl Scheduler {
    pub fn spawn<F>(ctx: Arc<RuntimeContext>, future: F) -> (Task, JoinHandle<F::Output>)
    where
        F: Future + Send + 'static,
        F::Output: Send + 'static,
    {
        unsafe { Task::new_unchecked((), future, Scheduler { runtime_ctx: ctx }) }
    }
}