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(); + } } } }