मैं async जंग एपीआई का उपयोग कर एक फ़ाइल से एक वेक्टर में सभी सामग्री को पढ़ने की कोशिश कर रहा हूँ:

    let mut content : Vec<u8> = vec![];
    let f = tokio::fs::File::open("myfilecontent")
        .and_then(|mut myfile| {
            myfile.read_buf(&mut content)
        });
    f.await;

लेकिन मुझे यह त्रुटि मिलती रहती है: error[E0515]: cannot return value referencing function parameter `myfile`

जो उचित लगता है, क्योंकि क्लोजर द्वारा लौटाए गए भविष्य को फ़ाइल का संदर्भ रखना चाहिए, लेकिन चूंकि यह क्लोजर फ़ाइल का एकमात्र उपयोगकर्ता है जो स्वामित्व ले सकता है। मैं जंग को सही काम करने के लिए कैसे मना सकता हूँ?

0
weary 12 अप्रैल 2020, 11:43

1 उत्तर

सबसे बढ़िया उत्तर

आप इस प्रकार async move ब्लॉक का उपयोग कर सकते हैं:

use futures::TryFutureExt;
use tokio::io::AsyncReadExt;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut content: Vec<u8> = vec![];

    let f = tokio::fs::File::open("myfilecontent").and_then(
        |mut myfile| async move { myfile.read_buf(&mut content).await },
    );

    f.await?;

    Ok(())
}

या and_then छोड़ें और सीधे .await के लिए जाएं:

use tokio::io::AsyncReadExt;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut content: Vec<u8> = vec![];

    let mut myfile = tokio::fs::File::open("myfilecontent").await?;
    myfile.read_buf(&mut content).await?;

    Ok(())
}
1
David Pedersen 12 अप्रैल 2020, 22:59