В VC++ Nov. 2013 CTP добавили ключевые слова __resumable и __await
Используются они так:
#include <ppltasks.h>
#include <pplawait.h>
concurrency::task<int> foo(int a) __resumable
{
auto sum = a;
sum += __await concurrency::create_task([]{ return 20; });
return sum;
}
#include <iostream>
int main()
{
auto&& t = foo(1);
std::cout << t.get() << '\n';
}
Это
Stackful сопрограммы.
Реализация использует фиберы.
foo трансформируется в
int __suspendable_foo(int a)
{
auto sum = a;
sum += concurrency::details::await_task<int>(concurrency::create_task([]{ return 20; }));
return sum;
}
concurrency::task<int> foo(int a)
{
return concurrency::details::create_resumable_context([]{...});
}
спрашивается нафига они так сделали и зачем вообще тогда оно нужно?
19.11.13 13:34: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт