blob: 1c92dcdb2a5c1f437921b12e5753f7a3d4aa75c3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
#include "vespa/vespalib/util/idestructorcallback.h"
#include <vespa/vespalib/util/isequencedtaskexecutor.h>
namespace search {
/**
* Class that schedules a sequenced task when instance is
* destroyed. Typically a shared pointer to an instance is passed
* around to multiple worker threads that performs portions of a
* larger task before dropping the shared pointer, triggering the
* callback when all worker threads have completed.
*/
class ScheduleSequencedTaskCallback : public vespalib::IDestructorCallback
{
vespalib::ISequencedTaskExecutor& _executor;
vespalib::ISequencedTaskExecutor::ExecutorId _id;
std::unique_ptr<vespalib::Executor::Task> _task;
public:
ScheduleSequencedTaskCallback(vespalib::ISequencedTaskExecutor& executor,
vespalib::ISequencedTaskExecutor::ExecutorId id,
std::unique_ptr<vespalib::Executor::Task> task) noexcept;
~ScheduleSequencedTaskCallback() override;
};
} // namespace search
|