#await #async #future #thread

async-await

仅提供一些宏来模拟异步和等待:

5个版本

使用旧的Rust 2015

0.2.1 2016年9月13日
0.2.0 2016年9月13日
0.1.2 2016年3月11日
0.1.1 2015年9月8日
0.1.0 2015年9月8日

#1848 in 异步

每月37次下载

MIT/Apache许可证

7KB
64

Async-Await

Crates.io

仅提供两个宏来模拟使用Futures(由eventual提供)实现的简单异步和等待。

用法

此库可在 crates.io 获取。将其添加到您的 Cargo.toml

[dependencies]
async-await = "0.1.2"

示例

以下是一个简单的示例,您需要执行 #[macro_use]use async_await::*;,因为宏会进行展开:

#[macro_use]
extern crate async_await;

use async_await::*;

fn main() {
    let computation = async!{"Hello world!"};
    println!("{}", await!(computation));
}

另一个使用 hyper 的示例,共享客户端和异步块:

#[macro_use]
extern crate async_await;
extern crate hyper;

use std::io::Read;
use std::sync::Arc;

use async_await::*;

use hyper::Client;
use hyper::header::Connection;

fn main() {
    let client = Arc::new(Client::new());

    let client_comp = client.clone();
    let computation = async!{{
        let mut res = client_comp.get("https://rust-lang.net.cn/")
            .header(Connection::close())
            .send().unwrap();
        let mut body = String::new();
        res.read_to_string(&mut body).unwrap();
        body
    }};

    println!("Before await!");
    println!("{}", await!{computation});
    println!("After await!");
}

您也可以提供默认的计算失败:

#[macro_use]
extern crate async_await;

use async_await::*;

fn main() {
    let computation = async!{panic!(":()")};
    assert_eq!("Recovered!", await!{computation, "Recovered!"});
}

许可证

许可协议如下:

任选其一。

贡献

除非您明确声明,否则您提交给工作的任何贡献,根据Apache-2.0许可证定义,都应以上述方式双重许可,不得附加任何其他条款或条件。

依赖项

~53KB