From 6a7092b9f7528a56c000fd81747ff34f68f29a2d Mon Sep 17 00:00:00 2001 From: Jules Kerssemakers Date: Thu, 8 Jun 2017 15:57:06 +0200 Subject: [PATCH] signal: Ctrl+C example: Defer stream initialisation (and explain how/why) --- examples/ctrl-c.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/examples/ctrl-c.rs b/examples/ctrl-c.rs index 16edd592a..6e3a10a55 100644 --- a/examples/ctrl-c.rs +++ b/examples/ctrl-c.rs @@ -2,7 +2,7 @@ extern crate futures; extern crate tokio_core; extern crate tokio_signal; -use futures::stream::Stream; +use futures::{Stream, Future}; use tokio_core::reactor::Core; fn main() { @@ -10,9 +10,13 @@ fn main() { let mut core = Core::new().unwrap(); // tokio_signal provides a convenience builder for Ctrl+C - // this even works cross-platform, linux and windows! - let ctrlc = tokio_signal::ctrl_c(&core.handle()); - let stream = core.run(ctrlc).unwrap(); + // this even works cross-platform: linux and windows! + // + // `fn ctrl_c()` produces a `Future` of the actual stream-initialisation + // the `flatten_stream()` convenience method lazily defers that + // initialisation, allowing us to use it 'as if' it is already the + // stream we want, reducing boilerplate Future-handling. + let stream = tokio_signal::ctrl_c(&core.handle()).flatten_stream(); println!("This program is now waiting for you to press Ctrl+C");