[VC++] Resumable functions and await
От: Abyx Россия  
Дата: 18.11.13 22:20
Оценка:
В 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++. Прикладные вопросы' — Кодт
In Zen We Trust
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.