Что означает ошибка Actix «Использовать Self :: Context :: notify () вместо прямого использования адреса»? - PullRequest
0 голосов
/ 25 декабря 2018

Я отредактировал пример Actix :

extern crate actix;
extern crate futures;
extern crate tokio;

use std::{thread, time};

use actix::prelude::*;
use futures::future::*;
use futures::Future;
use std::time::SystemTime;

/// Define `Ping` message
struct Ping(usize);

impl Message for Ping {
    type Result = usize;
}

/// Actor
struct MyActor {
    count: usize,
}

/// Declare actor and its context
impl Actor for MyActor {
    type Context = Context<Self>;
}

/// Handler for `Ping` message
impl Handler<Ping> for MyActor {
    type Result = usize;

    fn handle(&mut self, msg: Ping, _: &mut Context<Self>) -> Self::Result {
        self.count += msg.0;
        self.count
    }
}

fn main() {
    // start system, this is required step
    System::run(|| {
        // start new actor
        let addr = MyActor { count: 10 }.start();

        let start = SystemTime::now();

        // send message and get future for result
        let res = join_all((1..1000).into_iter().map(move |x| addr.send(Ping(x))));

        // handle() returns tokio handle
        tokio::spawn(
            res.map(move |_res| {
                let end = SystemTime::now();
                let difference = end
                    .duration_since(start)
                    .expect("SystemTime::duration_since failed");

                println!("Time taken: {:?}", difference);

                // stop system and exit
                System::current().stop();
            })
            .map_err(|_| ()),
        );
    });
}

При выполнении кода let res = join_all((1..1000).into_iter().map(move |x| addr.send(Ping(x)))); появляется ошибка.Это не происходит для чисел до 256 (определяется как MAX_SYNC_POLLS в mailbox.rs), но если я установлю его на 1000, эта паника произойдет.Когда я читаю код, это на самом деле оператор debugassert;это бежало с флагом --release.

тема 'main' запаниковала при 'Использовать Self :: Context :: notify () вместо прямого использования адреса', src / mailbox.rs: 103: 17

Что это за паническое сообщение?Увеличивает ли это производительность, если вместо этого мы используем Context::notify()?Если да, то как мне его использовать?

...