From 8510825a4345f7d74a13e8b44c67e0158560495b Mon Sep 17 00:00:00 2001 From: microcai Date: Wed, 16 Oct 2024 14:23:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AA=E6=98=AF=E4=B8=80=E7=A7=8D=E7=AC=AC?= =?UTF-8?q?=E5=85=AD=E6=84=9F=EF=BC=8C=E6=84=9F=E8=A7=89=E8=BF=99=E9=87=8C?= =?UTF-8?q?=E8=A6=81=E5=8A=A0=E4=B8=AA=E5=88=A4=E6=96=AD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ucoro/awaitable.hpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/include/ucoro/awaitable.hpp b/include/ucoro/awaitable.hpp index 357cae3..8334073 100644 --- a/include/ucoro/awaitable.hpp +++ b/include/ucoro/awaitable.hpp @@ -224,15 +224,18 @@ namespace ucoro } else { - // 由于 initial_supend 为 suspend_always - // 因此 如果不对 .detach() 的返回值调用 co_await - // 此协程将不会运行。 - // 因此,在本对象析构时,协程其实完全没运行过。 - // 正因为本对象析构的时候,协程都没有运行,就意味着 - // 其实用户只是调用了 .detach() 并没有对返回值进行 - // co_await 操作。 - // 因此为了能把协程运行起来,这里强制调用 resume - current_coro_handle_.resume(); + if (current_coro_handle_.promise().continuation_ == nullptr) + { + // 由于 initial_supend 为 suspend_always + // 因此 如果不对 .detach() 的返回值调用 co_await + // 此协程将不会运行。 + // 因此,在本对象析构时,协程其实完全没运行过。 + // 正因为本对象析构的时候,协程都没有运行,就意味着 + // 其实用户只是调用了 .detach() 并没有对返回值进行 + // co_await 操作。 + // 因此为了能把协程运行起来,这里强制调用 resume + current_coro_handle_.resume(); + } } } }