Line data Source code
1 : #pragma once 2 : 3 : #include <memory> 4 : 5 : #include "envoy/event/dispatcher.h" 6 : 7 : namespace Envoy { 8 : namespace Event { 9 : 10 : /** 11 : * A util to schedule a task to run in a future event loop cycle. One of the use cases is to run the 12 : * task after the previously DeferredDeletable objects are destroyed. 13 : */ 14 : class DeferredTaskUtil { 15 : private: 16 : class DeferredTask : public DeferredDeletable { 17 : public: 18 0 : DeferredTask(std::function<void()>&& task) : task_(std::move(task)) {} 19 0 : ~DeferredTask() override { task_(); } 20 : 21 : private: 22 : std::function<void()> task_; 23 : }; 24 : 25 : public: 26 : /** 27 : * Submits an item for run deferred delete. 28 : */ 29 0 : static void deferredRun(Dispatcher& dispatcher, std::function<void()>&& func) { 30 0 : dispatcher.deferredDelete(std::make_unique<DeferredTask>(std::move(func))); 31 0 : } 32 : }; 33 : 34 : } // namespace Event 35 : } // namespace Envoy