Size: a a a

2020 July 31

DP

Denis Paukaev in supapro.cxx
Что строка сразу после co_await выполняется сразу
источник

ПК

Побитый Кирпич... in supapro.cxx
В await_suspend или где-там надо я не помню, я вызову context.post(continuation_handler). continuation_handler это и будет код после co_await. Так я представляю себе как это работает
источник

АК

Александр Караев... in supapro.cxx
co_await f();
g();
...

примерно эквивалентно
f().then([&]{
 g();
 ...
});
источник

DP

Denis Paukaev in supapro.cxx
then отработает только после окончания f
источник

DP

Denis Paukaev in supapro.cxx
Правда же
источник

ПК

Побитый Кирпич... in supapro.cxx
Александр Караев
co_await f();
g();
...

примерно эквивалентно
f().then([&]{
 g();
 ...
});
или так, да, если then нотация, а не как в асио
источник

DP

Denis Paukaev in supapro.cxx
Тем не менее
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
then отработает только после окончания f
Нет
источник

ПК

Побитый Кирпич... in supapro.cxx
Иначе в этом не было бы смысла!
источник

DP

Denis Paukaev in supapro.cxx
Пруф, что выполняется строчка сразу после co_await до окончания awaitable
источник

АК

Александр Караев... in supapro.cxx
увы, но да
источник

ПК

Побитый Кирпич... in supapro.cxx
А, я не так прочитал
источник

DP

Denis Paukaev in supapro.cxx
Александр Караев
co_await f();
g();
...

примерно эквивалентно
f().then([&]{
 g();
 ...
});
Даже тут видно что до окончания f() никакой then работать не будет
источник

ПК

Побитый Кирпич... in supapro.cxx
Короче, я запутался слегка, но мой аргумент остаётся в силе:
awaitable<void> do_some(int& param) {
   foo();
   co_await bar();
   cout << param;
}
источник

ПК

Побитый Кирпич... in supapro.cxx
Тут UB если param протух
источник

ПК

Побитый Кирпич... in supapro.cxx
f().then([&]{
 g();
 ...
});
источник

ПК

Побитый Кирпич... in supapro.cxx
И здесь тоже если мы захватываем по ссылке, то в колбеке могут быть dangling reference
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
Короче, я запутался слегка, но мой аргумент остаётся в силе:
awaitable<void> do_some(int& param) {
   foo();
   co_await bar();
   cout << param;
}
не могут

int i{};
co_await do_some(i);

и даже при наличии N потоков i переживает do_some
источник

DP

Denis Paukaev in supapro.cxx
это условный аналог

int i{};
auto v = std::async(..., &i);
v.wait();
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
не могут

int i{};
co_await do_some(i);

и даже при наличии N потоков i переживает do_some
Такой может и переживает, а
co_await do_some(get_some_object().get_some_reference_to_int());

Уже не факт
источник