Гипер-сервер разрывает соединение при возврате Async :: NotReady в будущем

import javax.servlet [/g3]

ШАГ 1

Перейти к свойствам вашего проекта (с помощью Alt + Enter или righ-click)

STEP 2

проверить на Apache Tomcat v7.0 под целевым временем выполнения и работает.

2
задан Shepmaster 20 January 2019 в 03:52
поделиться

1 ответ

Hyper построен поверх фьючерсного ящика и использует свою будущую модель, известную как «готовность» или «извлечение», когда значения извлекаются из фьючерсов по требованию, а в противном случае задача уведомляется , когда значение может быть готово к извлечению.

Когда poll возвращает NotReady, текущее задание должно зарегистрироваться для уведомления об изменении готовности, в противном случае задание может никогда не быть выполнено. Любая функция, которая возвращает Async, должна придерживаться этого.

Другими словами, вам следует подождать, пока poll не сможет вернуть Ready, или уведомить текущее задание, чтобы указать, что оно готово к прогрессу, и вернуть NotReady

// notify about progress
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
    println!("Poll future");

    if self.ready {
        println!("Future ready");

        return Ok(Async::Ready(()));
    }

    println!("Future not ready");
    self.ready = true;

    // The executor will poll this task next iteration
    futures::task::current().notify();
    Ok(Async::NotReady)
}

// wait until it is Ready
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
    loop {
        println!("Poll future");

        if self.ready {
            println!("Future ready");
            return Ok(Async::Ready(()));
        }

        println!("Future not ready");
        self.ready = true;
    }
}

Документы Токио [ 117] 1 2 может прояснить это.

0
ответ дан Shepmaster 20 January 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: