2

我有一个 actix 端点,我需要做一个同步的 http 客户端获取来获得一些结果,并返回一些数据。我的端点不能使用async,所以我不能使用任何.await方法。

我试过在我的端点中使用 reqwests 阻塞客户端,如下所示:

{ ...

  let res = reqwest::blocking::get(&fetch_url)?
    .json::<MyResp>()?;
  ...

但它给了我错误:

thread 'main' panicked at 'Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.', /.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.9/src/runtime/enter.rs:19:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
4

3 回答 3

1

您应该尝试为此创建一个新线程:

std::thread::spawn(move || {

    reqwest::blocking::get(&url).unwrap().json().unwrap()

}).join().unwrap()
于 2020-11-26T05:46:27.603 回答
0

我不知道如何让它工作reqwest(它一定与actix有一些奇怪的冲突),但由于某种原因,它与chttp.

chttp::get(&fetch_url)?.text()?;

于 2020-03-07T18:49:01.190 回答
0

您不能在函数内部使用阻塞async函数。

而不是reqwest::blocking::get()使用reqwest::get().await.

于 2020-04-24T17:37:58.440 回答