载入中...
搜索中...
未找到
Task.cpp
浏览该文件的文档.
1#include "thread/Task.h"
2
3#include "common/Exception.h"
4
5namespace eve {
6namespace thread {
7
8Task::Task(std::function<void()> fn) {
9 if (!fn)
10 throw eve::Exception("Task function is null");
11 state_ = std::make_shared<State>(std::move(fn));
12}
13
14Task::Task(std::shared_ptr<State> state) : state_(std::move(state)) {}
15
16Task::~Task() = default;
17
18std::string Task::getStatus() const {
19 std::lock_guard<std::mutex> lock(state_->mu);
20 return state_->status;
21}
22
23bool Task::isDone() const {
24 std::lock_guard<std::mutex> lock(state_->mu);
25 return state_->status == "done" || state_->status == "failed";
26}
27
28bool Task::hasFailed() const {
29 std::lock_guard<std::mutex> lock(state_->mu);
30 return state_->status == "failed";
31}
32
33std::string Task::getError() const {
34 std::lock_guard<std::mutex> lock(state_->mu);
35 return state_->error;
36}
37
38void Task::wait() {
39 auto state = state_;
40 std::unique_lock<std::mutex> lock(state->mu);
41 state->cv.wait(lock, [&state] { return state->status == "done" || state->status == "failed"; });
42}
43
44void Task::run() {
45 run(state_);
46}
47
48void Task::run(const std::shared_ptr<State> &state) {
49 {
50 std::lock_guard<std::mutex> lock(state->mu);
51 state->status = "running";
52 }
53
54 try {
55 state->fn();
56 std::lock_guard<std::mutex> lock(state->mu);
57 state->status = "done";
58 } catch (const eve::Exception &e) {
59 std::lock_guard<std::mutex> lock(state->mu);
60 state->status = "failed";
61 state->error = e.what();
62 } catch (const std::exception &e) {
63 std::lock_guard<std::mutex> lock(state->mu);
64 state->status = "failed";
65 state->error = e.what();
66 } catch (...) {
67 std::lock_guard<std::mutex> lock(state->mu);
68 state->status = "failed";
69 state->error = "unknown exception";
70 }
71
72 state->cv.notify_all();
73}
74
75} // namespace thread
76} // namespace eve
JobSystemThreadPool::State * state
SettlementPipeline::Stage fn
virtual const char * what() const
Returns a string containing reason for the exception.
Definition Exception.h:23
bool hasFailed() const
Definition Task.cpp:28
void wait()
Block until the task finishes (done or failed).
Definition Task.cpp:38
std::string getError() const
Definition Task.cpp:33
Task(std::function< void()> fn)
Definition Task.cpp:8
bool isDone() const
Definition Task.cpp:23
std::string getStatus() const
Definition Task.cpp:18
Definition Build.cpp:11