Конфликт времени жизни при использовании asyn c fn в потоке - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь использовать приведенный ниже asyn c fn Conn::event в asyn c l oop, но получаю следующую ошибку:

error [E0495]: не могу определить подходящее время жизни для autoref из-за противоречивых требований

Исходя из моего ограниченного понимания проблемы, я предполагаю, что он жалуется, потому что ссылка на self связана в типе desugared Future, который требует 'static срок службы, в то время как try_for_each нужно что-то меньшее? Я вне моей лиги здесь!

Как я могу изменить этот код, чтобы ... хм ... работать?

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6d5222afe9cc7d9bbe41f7ac0a29d72a

use futures::{Sink, SinkExt, TryFutureExt, TryStreamExt};
use std::marker::Unpin;
use tokio::io::{self, AsyncBufReadExt};

pub struct Conn<S> {
    sink: S,
}

impl<S> Conn<S>
where
    S: Sink<String>,
    S: Unpin,
{
    pub async fn event(&mut self, data: String) -> Result<(), ()> {
        self.sink.send(data).await.map_err(|_| ())
    }

    pub async fn run(self) -> Result<(), ()> {
        io::BufReader::new(io::stdin())
            .lines()
            .map_err(|_| ())
            .try_for_each(|event| self.event(event))
            .await
    }
}

fn main() {}
...