web-dev-qa-db-fra.com

panique avec "thread 'main' paniqué à cause de" non en cours d'exécution sur le runtime Tokio "

J'utilise l'exemple de code sur le billet de blog d'Elastic Search concernant leur nouvelle caisse et je ne parviens pas à le faire fonctionner comme prévu. Le fil panique avec thread 'main' panicked at 'not currently running on the Tokio runtime.'.

Qu'est-ce que le runtime Tokio, comment le configurer et pourquoi le dois-je?

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

J'ai eu la même erreur quand j'avais l'habitude de tokio::run (à partir de la version tokio = 0.1) avec crate qui utilise tokio02 (tokio version = 0.2) en interne (dans mon cas, c'était reqwest). D'abord, je viens de changer std::future::Future à futures01::future::Future avec futures03::compat . Pour le faire compiler. Après l'exécution, j'obtiens exactement votre erreur.

Solution:

L'ajout de tokio-compat a résolu mon problème.


En savoir plus sur tokio compat

1
S.R