Guest User

Untitled

a guest
Nov 13th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 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(
  25. vec![10, 100, 1000].iter().map(|times| get_times_future(num, *times))
  26. ))
  27. });
  28. second_level.flatten().for_each(|resp| {
  29. println!("{}", resp);
  30. Ok(())
  31. })
  32. }));
  33. if let Err(_) = calculations {
  34. println!("error")
  35. }
  36. }
Add Comment
Please, Sign In to add comment