web-dev-qa-db-ja.com

現在「Tokioランタイムで実行されていない」でパニックが発生する「スレッド「メイン」」でパニック

新しいクレートについてElastic Searchのブログ投稿でサンプルコードを使用していますが、意図したとおりに機能させることができません。スレッドはthread 'main' panicked at 'not currently running on the Tokio runtime.'でパニックになります。

Tokioランタイムとは何ですか。どのように構成しますか。また、なぜそれが必要なのですか。

use futures::executor::block_on;

async elastic_search_example() -> Result<(), Box<dyn Error>> {
    let index_response = client
        .index(IndexParts::IndexId("tweets", "1"))
        .body(json!({
            "user": "kimchy",
            "post_date": "2009-11-15T00:00:00Z",
            "message": "Trying out Elasticsearch, so far so good?"
        }))
        .refresh(Refresh::WaitFor)
        .send()
        .await?;
    if !index_response.status_code().is_success() {
        panic!("indexing document failed")
    }
    let index_response = client
        .index(IndexParts::IndexId("tweets", "2"))
        .body(json!({
            "user": "forloop",
            "post_date": "2020-01-08T00:00:00Z",
            "message": "Indexing with the Rust client, yeah!"
        }))
        .refresh(Refresh::WaitFor)
        .send()
        .await?;
    if !index_response.status_code().is_success() {
        panic!("indexing document failed")
    }
}

fn main() {
    block_on(elastic_search_example());
}
5
Miranda Abbasi

内部でtokio::run(tokioバージョン= 0.2)を使用するクレートでtokio02(tokioバージョン= 0.1から)を使用したときにも同じエラーが発生しました(私の場合はreqwestでした)。まず、std::future::Futurefutures01::future::Futurefutures03::compat で変更しました。コンパイルさせるため。実行後、正確にエラーが発生します。

解決:

tokio-compat を追加すると問題が解決しました。


tokio compatの詳細

1
S.R