[core] Simplify Thread::invokeSync (#6128)
This commit is contained in:
@@ -156,7 +156,7 @@ void DefaultFileSource::setAccessToken(const std::string& accessToken) {
|
||||
}
|
||||
|
||||
std::string DefaultFileSource::getAccessToken() const {
|
||||
return thread->invokeSync<std::string>(&Impl::getAccessToken);
|
||||
return thread->invokeSync(&Impl::getAccessToken);
|
||||
}
|
||||
|
||||
std::unique_ptr<AsyncRequest> DefaultFileSource::request(const Resource& resource, Callback callback) {
|
||||
|
||||
@@ -44,23 +44,15 @@ public:
|
||||
}
|
||||
|
||||
// Invoke object->fn(args...) in the runloop thread, and wait for the result.
|
||||
template <class R, typename Fn, class... Args>
|
||||
R invokeSync(Fn fn, Args&&... args) {
|
||||
template <typename Fn, class... Args>
|
||||
auto invokeSync(Fn fn, Args&&... args) {
|
||||
using R = std::result_of_t<Fn(Object, Args&&...)>;
|
||||
std::packaged_task<R ()> task(std::bind(fn, object, args...));
|
||||
std::future<R> future = task.get_future();
|
||||
loop->invoke(std::move(task));
|
||||
return future.get();
|
||||
}
|
||||
|
||||
// Invoke object->fn(args...) in the runloop thread, and wait for it to complete.
|
||||
template <typename Fn, class... Args>
|
||||
void invokeSync(Fn fn, Args&&... args) {
|
||||
std::packaged_task<void ()> task(std::bind(fn, object, args...));
|
||||
std::future<void> future = task.get_future();
|
||||
loop->invoke(std::move(task));
|
||||
future.get();
|
||||
}
|
||||
|
||||
private:
|
||||
Thread(const Thread&) = delete;
|
||||
Thread(Thread&&) = delete;
|
||||
|
||||
@@ -43,9 +43,9 @@ TEST(ThreadLocalStorage, Basic) {
|
||||
Thread<TestThread> thread2(context, &number2);
|
||||
Thread<TestThread> thread3(context, &number3);
|
||||
|
||||
EXPECT_EQ(number1, thread1.invokeSync<int>(&TestThread::getNumber));
|
||||
EXPECT_EQ(number2, thread2.invokeSync<int>(&TestThread::getNumber));
|
||||
EXPECT_EQ(number3, thread3.invokeSync<int>(&TestThread::getNumber));
|
||||
EXPECT_EQ(number1, thread1.invokeSync(&TestThread::getNumber));
|
||||
EXPECT_EQ(number2, thread2.invokeSync(&TestThread::getNumber));
|
||||
EXPECT_EQ(number3, thread3.invokeSync(&TestThread::getNumber));
|
||||
}
|
||||
|
||||
TEST(ThreadLocalStorage, NotSetReturnsNull) {
|
||||
|
||||
Reference in New Issue
Block a user