#include <chrono>
#include <cmath>
#include <iostream>
#include <thread>
int main() {
std::cout << "Example 1: Basic async execution\n";
{
int result = 0;
for (int i = 1; i <= 100; ++i) {
result += i;
}
return result;
});
std::cout << " Computing sum of 1..100 asynchronously...\n";
int result = future.
get();
std::cout << " Result: " << result << " (expected: 5050)\n";
}
std::cout << "\nExample 2: Chaining futures with then()\n";
{
return 16.0;
})
return std::sqrt(prev.get());
})
return prev.get() * 2.0;
});
std::cout <<
" sqrt(16) * 2 = " << chainedFuture.
get() <<
" (expected: 8)\n";
}
std::cout << "\nExample 3: make_ready_future for immediate values\n";
{
std::cout <<
" is_ready: " << (ready.
is_ready() ?
"true" :
"false") <<
"\n";
std::cout <<
" Value: " << ready.
get() <<
"\n";
}
std::cout << "\nExample 4: wait_for with timeout\n";
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
return 42;
});
auto status = slowFuture.
wait_for(std::chrono::milliseconds(10));
std::cout << " After 10ms wait: "
<< (status == std::future_status::ready ? "ready" : "timeout") << "\n";
std::cout <<
" After full wait: " << slowFuture.
get() <<
"\n";
}
std::cout << "\nExample 5: when_all for multiple futures\n";
{
auto allFutures =
dispenso::when_all(std::move(f1), std::move(f2), std::move(f3));
auto tuple = allFutures.get();
int sum = std::get<0>(tuple).get() + std::get<1>(tuple).get() + std::get<2>(tuple).get();
std::cout << " Sum of all futures: " << sum << " (expected: 60)\n";
}
std::cout << "\nExample 6: Future with custom ThreadPool\n";
{
std::cout <<
" Pi from custom pool: " << future.
get() <<
"\n";
}
std::cout << "\nExample 7: Future<void> for side effects\n";
{
int sideEffectValue = 0;
sideEffectValue = 123;
});
std::cout << " Side effect value: " << sideEffectValue << "\n";
}
std::cout << "\nAll Future examples completed successfully!\n";
return 0;
}
std::future_status wait_for(const std::chrono::duration< Rep, Period > &timeoutDuration) const
const Result & get() const