加协程

This commit is contained in:
2026-06-22 17:48:51 +08:00
parent 40ffd20afd
commit bd468dbf7f
2 changed files with 14 additions and 12 deletions
+9 -9
View File
@@ -17,7 +17,7 @@
#include <exception> #include <exception>
#include <optional> #include <optional>
namespace pscoro::asio_glue namespace ucoro::asio_glue
{ {
template<typename T> template<typename T>
struct asio_awaitable_state struct asio_awaitable_state
@@ -64,7 +64,7 @@ namespace pscoro::asio_glue
{ {
boost::asio::any_io_executor executor; boost::asio::any_io_executor executor;
if constexpr (pscoro::concepts::awaitable_promise_type<PromiseType>) if constexpr (ucoro::concepts::awaitable_promise_type<PromiseType>)
{ {
if (continue_handle.promise().local_) if (continue_handle.promise().local_)
{ {
@@ -139,13 +139,13 @@ namespace pscoro::asio_glue
struct initiate_do_invoke_ucoro_awaitable struct initiate_do_invoke_ucoro_awaitable
{ {
template<typename Handler> template<typename Handler>
void operator()(Handler&& handler, pscoro::awaitable<T> ucoro_awaitable) const void operator()(Handler&& handler, ucoro::awaitable<T> ucoro_awaitable) const
{ {
auto executor = boost::asio::get_associated_executor(handler); auto executor = boost::asio::get_associated_executor(handler);
if constexpr (std::is_void_v<T>) if constexpr (std::is_void_v<T>)
{ {
auto task = [handler = std::move(handler), ucoro_awaitable = std::move(ucoro_awaitable)]() mutable -> pscoro::awaitable<void> auto task = [handler = std::move(handler), ucoro_awaitable = std::move(ucoro_awaitable)]() mutable -> ucoro::awaitable<void>
{ {
try try
{ {
@@ -162,7 +162,7 @@ namespace pscoro::asio_glue
} }
else else
{ {
auto task = [handler = std::move(handler), ucoro_awaitable = std::move(ucoro_awaitable)]() mutable -> pscoro::awaitable<void> auto task = [handler = std::move(handler), ucoro_awaitable = std::move(ucoro_awaitable)]() mutable -> ucoro::awaitable<void>
{ {
try try
{ {
@@ -181,14 +181,14 @@ namespace pscoro::asio_glue
}; };
template<typename T> template<typename T>
auto to_asio_awaitable(pscoro::awaitable<T>&& ucoro_awaitable) auto to_asio_awaitable(ucoro::awaitable<T>&& ucoro_awaitable)
{ {
return boost::asio::async_initiate<decltype(boost::asio::use_awaitable), void(boost::system::error_code, T)>( return boost::asio::async_initiate<decltype(boost::asio::use_awaitable), void(boost::system::error_code, T)>(
initiate_do_invoke_ucoro_awaitable<T>{}, boost::asio::use_awaitable, std::move(ucoro_awaitable)); initiate_do_invoke_ucoro_awaitable<T>{}, boost::asio::use_awaitable, std::move(ucoro_awaitable));
} }
template<> template<>
inline auto to_asio_awaitable<void>(pscoro::awaitable<void>&& ucoro_awaitable) inline auto to_asio_awaitable<void>(ucoro::awaitable<void>&& ucoro_awaitable)
{ {
return boost::asio::async_initiate<decltype(boost::asio::use_awaitable), void(boost::system::error_code)>( return boost::asio::async_initiate<decltype(boost::asio::use_awaitable), void(boost::system::error_code)>(
initiate_do_invoke_ucoro_awaitable<void>{}, boost::asio::use_awaitable, std::move(ucoro_awaitable)); initiate_do_invoke_ucoro_awaitable<void>{}, boost::asio::use_awaitable, std::move(ucoro_awaitable));
@@ -197,10 +197,10 @@ namespace pscoro::asio_glue
} // namespace ucoro::asio_glue } // namespace ucoro::asio_glue
template<typename T> template<typename T>
struct pscoro::await_transformer<boost::asio::awaitable<T>> struct ucoro::await_transformer<boost::asio::awaitable<T>>
{ {
static auto await_transform(boost::asio::awaitable<T>&& asio_awaitable) static auto await_transform(boost::asio::awaitable<T>&& asio_awaitable)
{ {
return pscoro::asio_glue::asio_awaitable_awaiter<T>{std::move(asio_awaitable)}; return ucoro::asio_glue::asio_awaitable_awaiter<T>{std::move(asio_awaitable)};
} }
}; };
+5 -3
View File
@@ -213,8 +213,10 @@ target_link_libraries(Core_exe PRIVATE Core_Static)
set(ucoro_cmake_dir "${CMAKE_CURRENT_LIST_DIR}/3rd/ucoro/include/ucoro")
#add_subdirectory(${core_3rd}/ucoro/ucoro ${CMAKE_BINARY_DIR}/ucoro) if(EXISTS "${ucoro_cmake_dir}/CMakeLists.txt")
add_subdirectory("${ucoro_cmake_dir}" "${CMAKE_BINARY_DIR}/ucoro")
endif()
#include(${CMAKE_CURRENT_LIST_DIR}/learn_coro_code/main.cmake) #include(${CMAKE_CURRENT_LIST_DIR}/learn_coro_code/main.cmake)
@@ -239,4 +241,4 @@ target_link_libraries(Core_exe PRIVATE Core_Static)
# "ON" # "ON"
# "30" # "30"
#) #)
#message("2222222222222") #message("2222222222222")