APIs assíncronas e síncronas
Nesta página
Visão geral
Neste guia, você aprenderá sobre as APIsassíncronas e síncronas do driver Rust. Este guia explica como habilitar as APIs disponíveis e estruturar seu código para usar cada uma.
O driver Rust oferece suporte à crate de tempo de execução assíncrona tokio
, que é o tempo de execução padrão.
O driver também inclui uma API síncrona para casos de uso que exigem bloqueio ou quando o paralelismo não é necessário. Você pode selecionar a API síncrona adicionando sinalizadores de feição à dependência do mongodb
no seu arquivo Cargo.toml
.
Este guia inclui as seguintes seções:
Configurar o tempo de execução assíncrono mostra como configurar seu aplicação para usar o tempo de execução assíncrono
tokio
Configurar a API síncrona mostra como configurar seu aplicação para usar os tempos de execução síncronos
sync
etokio-sync
Usar APIs assíncronas e síncronas mostra como habilitar as APIs de tempos de execução assíncronas e síncronas em seu aplicação
Informações adicionais fornecem links para recursos e documentação da API para os tipos e métodos mencionados neste guia
Configurar o tempo de execução assíncrono
O driver utiliza o tempo de execução tokio
por padrão, então você pode utilizar este tempo de execução sem especificar nenhum sinalizador de feição no arquivo Cargo.toml
do seu projeto. Para obter mais informações sobre como instalar o driver e configurar seu arquivo Cargo.toml
, consulte a etapa Download e instalação do Início Rápido.
Importante
A partir do driver Rust v3.0, o tempo de execução tokio
é a única crate de tempo de execução assíncrona que o driver suporta. Versões anteriores do driver também suportam a crate de tempo de execução do async-std
.
Se seu aplicação usar o tempo de execução async-std
, você poderá iniciar um tempo de execução tokio
no mesmo aplicação criando uma instância de estrutura Runtime
e encapsulando operações de driver com o método Runtime::spawn()
. Certifique-se de usar a mesma instância Runtime
para instanciar um Client
e chamar os métodos de driver nessa instância Client
.
Para ver um exemplo que instancia um Runtime
e chama o spawn()
método ,consulte a documentação do tokio.
Exemplo de tempo de execução do Tokio
O código a seguir usa o módulo task
da caixa tokio
para criar tarefas simultâneas separadas para várias operações de dados:
let client = Client::with_uri_str("<connection string>").await?; let some_data = doc! { "title": "1984", "author": "George Orwell" }; for i in 0..5 { let client_ref = client.clone(); let somedata_ref = some_data.clone(); task::spawn(async move { let collection = client_ref .database("items") .collection::<Document>(&format!("coll{}", i)); collection.insert_one(somedata_ref).await }); }
Configurar a API síncrona
O driver também fornece uma API síncrona de bloqueio. Para usar a tokio
API síncrona , adicione o "sync"
sinalizador de recurso mongodb
, conforme mostrado no exemplo a seguir:
[dependencies.mongodb] version = "3.1.0" features = ["sync"]
Exemplo de código síncrono
Ao usar a API síncrona, use tipos do módulo mongodb::sync
para executar operações. O código abaixo usa o módulo sync
para inserir dados em uma collection usando a API síncrona. Quando o método insert_one
é executado dentro do loop for
, o driver aguarda que cada solicitação seja concluída antes de continuar.
use mongodb::sync::Client; fn main() { let client = Client::with_uri_str("<connection string>")?; let some_data = doc! { "title": "1984", "author": "George Orwell" }; for i in 0..5 { let client_ref = client.clone(); let somedata_ref = some_data.clone(); let collection = client_ref .database("items") .collection::<Document>(&format!("coll{}", i)); collection.insert_one(somedata_ref); } }
Usar APIs assíncronas e síncronas
Você pode usar APIs assíncronas e síncronas no mesmo aplicação. Por exemplo, para habilitar ambos os tempos de execução do tokio
, você pode adicionar a dependência do tokio
à sua lista de dependências e adicionar o sinalizador do mongodb
"sync"
dependência do :
[dependencies] futures = "0.3.28" tokio = {version = "1.32.0", features = ["full"]} [dependencies.mongodb] version = "3.1.0" features = ["sync"]
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte as seguintes páginas:
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: