continuable v2.0.0 Release Notes
Release Date: 2018-01-30 // about 6 years ago-
๐ Zero cost futures now with error handling and co_await support
In version 2.0 the library was heavily improved in multiple ways:
Error handling
๐ Usually it is inconvenient to handle error codes and exceptions in an asynchronous context, as we all know
std::future
supports error handling through exceptions already. We now introduce this capability to the continuable library while allowing error codes to be used as well.Consider the function
cti::continuable<> get_bad_continuable()
which always resolves through an error, then you may handle the error code or exception as following:get\_bad\_continuable() .then([] { // ... never invoked }) .then([] { // ... never invoked as well }) .fail([] (std::exception\_ptr e) { try { std::rethrow\_exception(e); } catch(std::exception const& e) { // Handle the exception here } });
Abstracting callbacks as promises
Since a callback may be called through an error or result the
cri::promise
class was added in order ro provide a similar interface tostd::promise
:auto http\_request(std::string url) {return cti::make\_continuable\<std::string\>([url = std::move(url)](cti::promise\<std::string\> /\*or auto&&\*/ promise) { // Perform the actual request through a different library,// resolve the promise upon completion of the task. promise.set\_value("\<html\> ... \</html\>"); // ...or promise.set\_exception(...);}); }
๐
co_await
supportExperimental coroutine (
co_await
andco_return
) support was added, this is available on MSVC 2017 and Clang 5.0.int i = co\_await cti::make\_continuable\<int\>([](auto&& promise) { promise.set\_value(0); });
Minor improvements
The library was improved in other ways:
constexpr
andnoexcept
improvements- Compile-time improvements
- ๐ Documentation improvements
Header split
Since the overall library size was increased the headers were split into smaller chunks.