use std::rc::{Rc, Weak};
use crate::{ExecutorCore, JoinHandle};
#[derive(Clone, Debug)]
pub struct TaskSet {
core: Weak<ExecutorCore>,
}
impl TaskSet {
pub(crate) fn new(core: &Rc<ExecutorCore>) -> Self {
Self { core: Rc::downgrade(core) }
}
pub fn add<F, R>(&self, future: F) -> JoinHandle<R>
where
F: IntoFuture<Output = R> + 'static,
R: 'static,
{
self.core
.upgrade()
.expect("task set is disconnected - executor has been dropped")
.add_task(future)
}
}
#[cfg(test)]
mod tests {
use static_assertions::assert_not_impl_any;
use super::*;
#[test]
fn thread_safety() {
assert_not_impl_any!(TaskSet: Send, Sync);
}
}