在PPL任务中进行构造的目的是什么?
What is the purpose of .then construction in PPL tasks?
我很有趣。似乎Visual Studio 2012还不支持它(可能是未来的CTP?)。它在标准C 11 async库中是否具有等效?
目的是让您表达必须按顺序执行的异步任务。
例如,假设我正在GUI应用程序中。当用户按下按钮时,我想启动一个任务以在线检索文件,然后对其进行处理以检索某种数据,然后使用此数据更新GUI。在发生这种情况时,还有很多其他任务正在进行,主要是为了保持GUI响应。
这可以通过使用调用回调的回调来完成。与lambdas关联的.then()功能允许您编写实例化的所有回调内容(如果需要,仍然可以使用单独的回调)。它也不能保证每个单独任务的工作将由同一线程完成,如果初始线程已经有太多工作要做,则可以免费线程窃取任务。
.then(then()函数在C 11中不存在
klaim已经做了一个很好的答案,但是我想我给出一个特定的例子。
.then
将延续连接到任务,并且是等效于同步.get
的异步。
c 11具有std::future
,相当于concurrency::task
。std::future
当前仅具有.get
,但是有一个建议添加.then
(以及其他好东西)。
std::async(calculate_answer(the_question_of_everything))
.then([](std::future<int> f){ std::cout << f.get() << "n"; });
上面的摘要将创建一个异步任务(使用std::async
启动),然后附加连续性,该连续性在完成上述任务后立即通过完成任务的std::future
。这实际上返回了的另一个std::future
任务,而当前的C 11标准将阻止其击曲线,但是还有另一个建议可以使destructor unblocking tosloctor。因此,使用上述代码,您可以创建一个射击任务,该任务在计算后立即打印出答案。
等效的阻止是:
auto f = std::async(calculate_answer(the_question_of_everything));
std::cout << f.get() << "n";
此代码将在f.get()
中阻塞直到答案可用。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 在PPL任务中进行构造的目的是什么?