Насколько я вижу, этот метод действительно работает, но не с MSVC 2022, который дважды вызывает деструктор задачи, см. код ниже:
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
// simple timers
// stored timer tasks
struct timer_task
{
std::chrono::steady_clock::time_point target_time;
std::coroutine_handle handle;
};
// comparator
struct timer_task_before_cmp
{
bool operator()(const timer_task& left, const timer_task& right) const
{
return left.target_time > right.target_time;
}
};
std::priority_queue timers;
inline void submit_timer_task(std::coroutine_handle handle, std::chrono::nanoseconds timeout)
{
timers.push(timer_task{ std::chrono::steady_clock::now() + timeout, handle });
}
//template
struct UpdatePromise;
//template
struct UpdateTask
{
// declare promise type
using promise_type = UpdatePromise;
UpdateTask(std::coroutine_handle
handle) :
handle(handle)
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/71106923/calling-destroy-from-final-suspend-results-in-a-crash[/url]