Guest User

Untitled

a guest
Nov 13th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. extern crate futures;
  2. extern crate tokio;
  3.  
  4. use futures::future::ok;
  5. use futures::{Future, Stream};
  6. use tokio::prelude::future::lazy;
  7. use tokio::runtime::current_thread::Runtime;
  8.  
  9. fn get_times2_future(number: u32) -> impl Future<Item = u32, Error = ()> {
  10. ok(number * 2)
  11. }
  12.  
  13. fn get_times_future(number: u32, times: u32) -> impl Future<Item = u32, Error = ()> {
  14. ok(number * times)
  15. }
  16.  
  17. fn main() {
  18. let numbers = vec![1, 2, 3];
  19. let mut runtime = Runtime::new().unwrap();
  20. let calculations = runtime.block_on(lazy(|| {
  21. let calc_futures = numbers.iter().map(|number| get_times2_future(*number));
  22. let first_level = futures::stream::futures_unordered(calc_futures);
  23. let second_level = first_level.and_then(|num| {
  24. Ok(futures::stream::futures_unordered(vec![
  25. get_times_future(num, 10),
  26. get_times_future(num, 100),
  27. get_times_future(num, 1000),
  28. ]))
  29. });
  30. second_level.flatten().for_each(|resp| {
  31. println!("{}", resp);
  32. Ok(())
  33. })
  34. }));
  35. if let Err(_) = calculations {
  36. println!("error")
  37. }
  38. }
Add Comment
Please, Sign In to add comment