The Parallel Patterns Library (PPL) relies on a continuation-passing style for asynchronous programming, where tasks are invoked and then linked to callable objects that process their results. This approach was the primary method for handling asynchronous operations before the introduction of await
and co_await
keywords in C#, JavaScript, and C++, making it essential to understand for developers working with older code or scenarios that still employ this style.
On Writing Loops in PPL and Continuation-passing Style, Part 1
By Raymond Chen
From the article:
The Parallel Patterns Library (PPL) is based on a continuation-passing style, where you invoke a task, and then attach a callable object that will be given the result. Prior to the introduction of the
await
andco_await
keywords to C#, JavaScript, and C++, this was your only real choice for asynchronous programming.Sequential calculations are fairly straightforward in continuation-passing style because you just pass the next step as the continuation.
// Synchronous version auto widget = find_widget(name); auto success = widget.toggle(); if (!success) report_failure(); // Asynchronous version find_widget(name).then([=](auto widget) { return widget.toggle(); }).then([=](auto success) { if (!success) report_failure(); });Iteration is harder to convert to continuation-passing style because you need to restart the task chain, which means you have recursion.
Add a Comment
Comments are closed.