/proc/self/cwd/source/common/event/deferred_task.h
Line | Count | Source (jump to first uncovered line) |
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 |