Size: a a a

2021 July 02

O

Ofee in C++ Together 2.0
У тебя есть такая последовательность: длительная операция –> результат. Вот вместо того, чтобы второе запихивать куда-то внутрь лямбды, можно просто писать как обычный синхронный код, возвращая значения через возвращаемые значения функции, собирая даже такие цепочки
длительная операция –> результат –> ещё более длительная обработка –> новый результат –> ...

И с корутинами ты можешь строить очень длинные цепочки, а с коллбеками у тебя всё будет расти вложенность кода, рано или поздно, отступов станет больше, чем кода
источник

VK

Valentin Kornienko in C++ Together 2.0
Дада, это и имеется ввиду
источник

VK

Valentin Kornienko in C++ Together 2.0
Получение в итоге линейной ассинхронности под капотом
источник

RM

Roy Mustang in C++ Together 2.0
Как это можно реализовать?
источник

A

Alex Ф-ф-фэils!🌠︙... in C++ Together 2.0
@Valentyn_Korniienko покажи пример плз
источник

RM

Roy Mustang in C++ Together 2.0
В том то и дело что клиент не ждет, каллбэк сам вызывается получается, в этом и плюс
источник

O

Ofee in C++ Together 2.0
Где-то в бложике на мсдн была целая серия статей про это, мы всем вектором плакали, устав от них
источник

O

Ofee in C++ Together 2.0
Так продолжение функции тоже само вызовется
источник

A

Alex Ф-ф-фэils!🌠︙... in C++ Together 2.0
ты пример покажи для co_await только
источник

O

Ofee in C++ Together 2.0
Да вот он был, только он какой-то не очень
источник

RM

Roy Mustang in C++ Together 2.0
Это подразумевается в основном потоке
источник

O

Ofee in C++ Together 2.0
@r_mustang, но, если обратишь внимание, твой JobSystem никуда не делся в этом примере, он делает то же, что и делал, только у пользователя линейный интерфейс появился
источник

VA

Vladislav Averkov in C++ Together 2.0
апаче 2.0
источник

O

Ofee in C++ Together 2.0
Да вообще не важно. Лично у меня сделано так, что код функции на всех этапах выполняется на том потоке, в котором она в первый раз вызвалась
источник

VD

Vlad Doc in C++ Together 2.0
ah-64
источник

O

Ofee in C++ Together 2.0
А то, что мы отправляем в другой поток (Execute) – вот как оно закончится, мы разбудим текущую функцию в старом потоке и продолжим
источник

VK

Valentin Kornienko in C++ Together 2.0
Для такого механизма необходимо будет сделать небольшой финт ушами
источник

A

Alex Ф-ф-фэils!🌠︙... in C++ Together 2.0
final_resume
источник

VK

Valentin Kornienko in C++ Together 2.0
Ибо просто corohandle.resume() в другом потоке разбудит корутину в другом потоке
источник

O

Ofee in C++ Together 2.0
Поэтому execute принимает нечто, при конструировании чего из лямбды, запоминается текущий event loop, а при пробуждении оно знает, куда себя запушить
источник