// request_scheduler.hpp #pragma once #include #include #include #include #include #include #include namespace lsp::scheduler { class RequestScheduler { public: using TaskFunc = std::function()>; using ResponseCallback = std::function; explicit RequestScheduler(size_t concurrency = std::thread::hardware_concurrency()); ~RequestScheduler(); void Submit(const std::string& request_id, TaskFunc task); bool Cancel(const std::string& request_id); void SetResponseCallback(ResponseCallback callback); void WaitAll(); private: struct TaskContext { std::atomic cancelled{false}; }; void SendResponse(const std::string& response); private: tf::Executor executor_; mutable std::mutex mutex_; std::unordered_map> running_tasks_; ResponseCallback response_callback_; }; }