Experimenting with our runtime 261 We should get the same output as we've seen before: Program starting FIRST POLL-START OPERATION main: 1 pending tasks. Sleep until notified. HTTP/1. 1 200 OK content-length: 15 [==== ABBREVIATED ====] Hello Async Await main: All tasks are finished That's pretty neat, isn't it? So, now we have created our own async runtime that uses Rust's Future, Waker, Context, and async/await. Now that we can pride ourselves on being runtime implementors, it's time to do some experiments. I'll choose a few that will also teach us a few things about runtimes and futures in Rust. We're not done learning just yet. Experimenting with our runtime Note Y ou'll find this example in the book's repository in the ch10/b-rust-futures-experiments folder. The different experiments will be implemented as different versions of the async_main function numbered chronologically. I'll indicate which function corresponds with which function in the repository example in the heading of the code snippet. Before we start experimenting, let's copy everything we have now to a new folder: 1. Create a new folder called b-rust-futures-experiments. 2. Copy everything from the a-rust-futures folder to the new folder. 3. Open Cargo. toml and change the name attribute to b-rust-futures-experiments. The first experiment will be to exchange our very limited HTTP client with a proper one. The easiest way to do that is to simply pick another production-quality HTTP client library that supports async Rust and use that instead. So, when trying to find a suitable replacement for our HTTP client, we check the list of the most popular high-level HTTP client libraries and find reqwest at the top. That might work for our purposes, so let's try that first.