56 lines
1.5 KiB
C
56 lines
1.5 KiB
C
|
|
// Copyright 2021 The Chromium Authors
|
||
|
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
|
// found in the LICENSE file.
|
||
|
|
|
||
|
|
#ifndef BASE_TASK_DELAYED_TASK_HANDLE_H_
|
||
|
|
#define BASE_TASK_DELAYED_TASK_HANDLE_H_
|
||
|
|
|
||
|
|
#include <memory>
|
||
|
|
|
||
|
|
#include "base/base_export.h"
|
||
|
|
|
||
|
|
namespace base {
|
||
|
|
|
||
|
|
// A handle to a delayed task which can be used to cancel the posted task. Not
|
||
|
|
// thread-safe, can only be held and invoked from the posting sequence.
|
||
|
|
class BASE_EXPORT DelayedTaskHandle {
|
||
|
|
public:
|
||
|
|
// The delegate that allows each SequencedTaskRunners to have different
|
||
|
|
// implementations.
|
||
|
|
class Delegate {
|
||
|
|
public:
|
||
|
|
virtual ~Delegate() = default;
|
||
|
|
|
||
|
|
// Returns true if the task handle is valid.
|
||
|
|
virtual bool IsValid() const = 0;
|
||
|
|
|
||
|
|
// Cancels the task. A canceled task, whether removed from the underlying
|
||
|
|
// queue or only marked as canceled, will never be Run().
|
||
|
|
virtual void CancelTask() = 0;
|
||
|
|
};
|
||
|
|
|
||
|
|
// Construct a default, invalid, task handle.
|
||
|
|
DelayedTaskHandle();
|
||
|
|
|
||
|
|
// Construct a valid task handle with the specified |delegate|.
|
||
|
|
explicit DelayedTaskHandle(std::unique_ptr<Delegate> delegate);
|
||
|
|
|
||
|
|
~DelayedTaskHandle();
|
||
|
|
|
||
|
|
DelayedTaskHandle(DelayedTaskHandle&&);
|
||
|
|
DelayedTaskHandle& operator=(DelayedTaskHandle&&);
|
||
|
|
|
||
|
|
// Returns true if the task handle is valid.
|
||
|
|
bool IsValid() const;
|
||
|
|
|
||
|
|
// Cancels the task.
|
||
|
|
void CancelTask();
|
||
|
|
|
||
|
|
private:
|
||
|
|
std::unique_ptr<Delegate> delegate_;
|
||
|
|
};
|
||
|
|
|
||
|
|
} // namespace base
|
||
|
|
|
||
|
|
#endif // BASE_TASK_DELAYED_TASK_HANDLE_H_
|