Menu Docs
Página inicial do Docs
/ /

APIs assíncronas e síncronas

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 a tokio e async-std, duas caixas de tempo de execução assíncronas populares. Por padrão, o driver usa o tempo de execução assíncrono tokio , mas você pode selecionar um tempo de execução específico adicionando sinalizadores de recursos à dependência mongodb em seu arquivo Cargo.toml .

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 .

O driver usa o tempo de execução tokio por padrão. Você pode escolher explicitamente um tempo de execução adicionando os sinalizadores de feição "tokio-runtime" ou "async-std-runtime" à dependência mongodb .

Selecione nas abas a seguir para ver como adicionar sinalizadores de feições para cada caixa correspondente:

[dependencies.mongodb]
version = "2.7.1"
features = ["tokio-runtime"]
[dependencies.mongodb]
version = "2.7.1"
default-features = false
features = ["async-std"]

Para obter mais informações sobre como instalar o driver e adicionar sinalizadores de recurso, consulte a etapa Download e instalação do Início rápido.

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, None).await
});
}

O driver também fornece uma API síncrona de bloqueio. Para usar a API síncrona, adicione o sinalizador de feição "sync" ou "tokio-sync" à dependência mongodb .

Selecione nas abas a seguir para ver como adicionar sinalizadores de feições para cada caixa correspondente:

[dependencies.mongodb]
version = "2.7.1"
default-features = false
features = ["sync"]
[dependencies.mongodb]
version = "2.7.1"
default-features = false
features = ["tokio-sync"]

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, None);
}
}

Você pode usar API assíncronas e síncronas na mesma aplicação. Por exemplo, para habilitar ambos os tokio tempos de execução do , você pode adicionar a tokio dependência do à sua lista de dependências e adicionar o "tokio-sync" sinalizador à mongodb dependência do :

[dependencies]
futures = "0.3.28"
tokio = {version = "1.32.0", features = ["full"]}
[dependencies.mongodb]
version = "2.7.1"
features = ["tokio-sync"]

Para obter mais informações sobre os conceitos deste guia, consulte as seguintes páginas:

Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo:

Voltar

Considerações de desempenho

Nesta página