| 610 | // Thread is registered via platform API for cleanup on exit |
| 611 | template<typename T> |
| 612 | fl::task::Promise<T> delayed_resolve(const T& value, uint32_t delay_ms) { |
| 613 | auto p = fl::task::Promise<T>::create(); |
| 614 | |
| 615 | fl::thread t([p, value, delay_ms]() mutable { |
| 616 | for (uint32_t elapsed = 0; elapsed < delay_ms && !fl::platforms::ICoroutineRuntime::instance().isShutdownRequested(); elapsed += 1) { |
| 617 | uint32_t sleep_time = fl::min(1u, delay_ms - elapsed); |
| 618 | fl::this_thread::sleep_for(fl::chrono::milliseconds(sleep_time)); // ok sleep for |
| 619 | } |
| 620 | p.complete_with_value(value); |
| 621 | }); |
| 622 | |
| 623 | fl::platforms::register_background_thread(fl::move(t)); |
| 624 | return p; |
| 625 | } |
| 626 | |
| 627 | // Helper: Create a promise that rejects after a delay |
| 628 | template<typename T> |
nothing calls this directly
no test coverage detected