es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo almacenar Futuros de 2 funciones asincrónicas diferentes con firmas iguales en un vector.

¿Cómo almacenar Futuros de 2 funciones asíncronas diferentes con firmas iguales en un vector?

Tengo 2 funciones en diferentes cajones:

Cajón 1:

pub async fn resolve(
    client: &String,
    site: &String,
    id: &String,
) -> Result<String, Box<dyn std::error::Error>> {
    ...
    return Ok("".parse().unwrap());
}

Cajón 2:

pub async fn resolve(
    client: &String,
    site: &String,
    id: &String,
) -> Result<String, Box<dyn std::error::Error>> {
    ...
    return Ok("".parse().unwrap());
}

E intenté agregar resultados de llamadas de funciones así:

let mut futures : Vec<_> = Vec::new();
for i in 0..self.settings.count {
    futures.push(
        crate1::resolve(
            &self.settings.filed1,
            &self.settings.filed2,
            &product.id,
        )
    );

futures.push(
    crate2::resolve(
        &self.settings.filed1,
        &self.settings.filed2,
        &product.id,
    )
);


}

Pero obtuve esto:

error[E0308]: Tipos desajustados
   --> src\client.rs:124:17
    |
124 | /                 crate2::resolve(
125 | |                     &self.settings.filed1,
126 | |                     &self.settings.filed2,
127 | |                     &product.id,
128 | |                 )
    | |_________________^ se esperaba un tipo opaco, se encontró un tipo opaco diferente
    |
nota: al verificar el tipo de retorno del `async fn`
   --> src\crate1.rs:97:6
    |
97  | ) -> Result<String, Box<dyn std::error::Error>> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ se comprobó la `Salida` de este `async fn`, se esperaba un tipo opaco
nota: al verificar el tipo de retorno del `async fn`
   --> src\crate2.rs:17:6
    |
17  | ) -> Result<String, Box<dyn std::error::Error>> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ se comprobó la `Salida` de este `async fn`, se encontró un tipo opaco
    = nota: se esperaba un tipo opaco `impl futures::Future` (tipo opaco en <src\crate1.rs:97:6>)
             se encontró un tipo opaco `impl futures::Future` (tipo opaco en <src\crate2.rs:17:6>)
    = ayuda: considere `esperar` en ambos `Future`s
    = nota: usos distintos de `impl Trait` dan lugar a tipos opacos diferentes

¿Por qué Rust no puede deducir el tipo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para almacenar Futures de dos funciones asíncronas diferentes con firmas iguales en un vector, es necesario esperar en ambas Futures. Esto se debe a que diferentes usos de impl Trait resultan en diferentes tipos opacos, y Rust no puede deducir el tipo.

Comments are closed.