Home | History | Annotate | Download | only in threading
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // This file contains the implementation shared by
      6 // TaskRunner::PostTaskAndReply and WorkerPool::PostTaskAndReply.
      7 
      8 #ifndef BASE_THREADING_POST_TASK_AND_REPLY_IMPL_H_
      9 #define BASE_THREADING_POST_TASK_AND_REPLY_IMPL_H_
     10 
     11 #include "base/base_export.h"
     12 #include "base/callback.h"
     13 #include "base/location.h"
     14 
     15 namespace base {
     16 namespace internal {
     17 
     18 // Inherit from this in a class that implements PostTask to send a task to a
     19 // custom execution context.
     20 //
     21 // If you're looking for a concrete implementation of PostTaskAndReply, you
     22 // probably want base::TaskRunner, or you may want base::WorkerPool.
     23 class BASE_EXPORT PostTaskAndReplyImpl {
     24  public:
     25   virtual ~PostTaskAndReplyImpl() = default;
     26 
     27   // Posts |task| by calling PostTask(). On completion, |reply| is posted to the
     28   // sequence or thread that called this. Can only be called when
     29   // SequencedTaskRunnerHandle::IsSet(). Both |task| and |reply| are guaranteed
     30   // to be deleted on the sequence or thread that called this.
     31   bool PostTaskAndReply(const tracked_objects::Location& from_here,
     32                         OnceClosure task,
     33                         OnceClosure reply);
     34 
     35  private:
     36   virtual bool PostTask(const tracked_objects::Location& from_here,
     37                         OnceClosure task) = 0;
     38 };
     39 
     40 }  // namespace internal
     41 }  // namespace base
     42 
     43 #endif  // BASE_THREADING_POST_TASK_AND_REPLY_IMPL_H_
     44