diff --git a/librf/src/awaitable.h b/librf/src/awaitable.h index 0ed4b9e..4a65e37 100644 --- a/librf/src/awaitable.h +++ b/librf/src/awaitable.h @@ -33,7 +33,7 @@ namespace resumef { return future_type{ _state }; } - protected: + mutable counted_ptr _state = make_counted(true); }; diff --git a/librf/src/state.h b/librf/src/state.h index 8c115f7..f744f2d 100644 --- a/librf/src/state.h +++ b/librf/src/state.h @@ -82,6 +82,12 @@ namespace resumef void set_exception(std::exception_ptr e); + template + void throw_exception(_Exp e) const + { + set_exception(std::make_exception_ptr(std::move(e))); + } + template>> void future_await_suspend(coroutine_handle<_PromiseT> handler); diff --git a/tutorial/test_async_multi_thread.cpp b/tutorial/test_async_multi_thread.cpp index bf06a61..c356fc8 100644 --- a/tutorial/test_async_multi_thread.cpp +++ b/tutorial/test_async_multi_thread.cpp @@ -15,7 +15,7 @@ auto async_heavy_computing_tasks(int64_t val) { using namespace std::chrono; - promise_t awaitable; + awaitable_t awaitable; std::thread([val, st = awaitable._state] { diff --git a/vs_proj/librf.cpp b/vs_proj/librf.cpp index 81bfd1e..0830c19 100644 --- a/vs_proj/librf.cpp +++ b/vs_proj/librf.cpp @@ -38,7 +38,9 @@ int main(int argc, const char* argv[]) //resumable_main_resumable(); //resumable_main_routine(); //resumable_main_exception(); - resumable_main_dynamic_go(); + //resumable_main_dynamic_go(); + //resumable_main_multi_thread(); + resumable_main_timer(); /* resumable_main_benchmark_mem(); @@ -48,8 +50,6 @@ int main(int argc, const char* argv[]) resumable_main_benchmark_asio_server(); resumable_main_when_all(); - resumable_main_multi_thread(); - resumable_main_timer(); resumable_main_sleep(); resumable_main_mutex(); resumable_main_event(); diff --git a/vs_proj/librf.vcxproj b/vs_proj/librf.vcxproj index 95abf01..f7380de 100644 --- a/vs_proj/librf.vcxproj +++ b/vs_proj/librf.vcxproj @@ -249,12 +249,7 @@ - - true - true - true - true - + true true @@ -270,12 +265,7 @@ true - - true - true - true - true - + true true