3个稳定版本
2.1.0 | 2020年12月1日 |
---|---|
2.0.0 | 2020年11月27日 |
1.0.0 | 2020年11月21日 |
#1931 in 异步
14KB
228 行
async-spawner
执行器无关的任务启动器。
use core::future::Future;
use core::pin::Pin;
type BoxedFuture = Pin<Box<dyn Future<Output = ()> + Send + 'static>>;
#[async_std::main]
async fn main() {
struct AsyncStd;
impl async_spawner::Executor for AsyncStd {
fn block_on(&self, future: BoxedFuture) {
async_std::task::block_on(future);
}
fn spawn(&self, future: BoxedFuture) -> BoxedFuture {
Box::pin(async_std::task::spawn(future))
}
fn spawn_blocking(&self, task: Box<dyn FnOnce() + Send>) -> BoxedFuture {
Box::pin(async_std::task::spawn_blocking(task))
}
fn spawn_local(
&self,
future: Pin<Box<dyn Future<Output = ()> + 'static>>,
) -> BoxedFuture {
Box::pin(async_std::task::spawn_local(future))
}
}
async_spawner::register_executor(Box::new(AsyncStd));
let res = async_spawner::spawn(async {
println!("executor agnostic spawning");
1
})
.await;
assert_eq!(res, 1);
}
use core::future::Future;
use core::pin::Pin;
type BoxedFuture = Pin<Box<dyn Future<Output = ()> + Send + 'static>>;
#[tokio::main]
async fn main() {
struct Tokio;
impl async_spawner::Executor for Tokio {
fn block_on(&self, future: BoxedFuture) {
tokio::runtime::Builder::new_multi_thread()
.build()
.unwrap()
.block_on(future);
}
fn spawn(&self, future: BoxedFuture) -> BoxedFuture {
Box::pin(async { tokio::task::spawn(future).await.unwrap() })
}
fn spawn_blocking(&self, task: Box<dyn FnOnce() + Send>) -> BoxedFuture {
Box::pin(async { tokio::task::spawn_blocking(task).await.unwrap() })
}
fn spawn_local(
&self,
future: Pin<Box<dyn Future<Output = ()> + 'static>>,
) -> BoxedFuture {
let handle = tokio::task::spawn_local(future);
Box::pin(async { handle.await.unwrap() })
}
}
async_spawner::register_executor(Box::new(Tokio));
let res = async_spawner::spawn(async {
println!("executor agnostic spawning");
1
})
.await;
assert_eq!(res, 1);
}
许可证
本项目受以下任一许可证的许可:
- Apache许可证第2版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
您可选择。
依赖项
~0.9–12MB
~121K SLoC