Comments 7
Наверное, это круто (перешёл с плюсов на шарп много лет назад, и там уже был yield и пр.). Но оценить не могу. Язык становится все более похожим на язык пришельцев. Наверное, на нем хорошо писать матрицу или патчи для мироздания, но от обычного человека язык удаляется все дальше. Конечно, есть немало людей, для которых чем сложнее — тем лучше, код ради кода, и вот это всё… ладно) это уже холивар, пусть выскажутся те, кто пишет на плюсах.
А C# стал похожим на язык для пришельцев от добавления async/await, или асинхронный код написанный с async/await проще и понятнее, чем писали до этого (сколько там парадигм было 3 или 4, я не помню)?
C# был спроектирован с учётом накопленного в C++ и Java опыта, и стартовал с новой страницы, без бремени совместимости, поэтому его синтаксис всё же полегче, мягко говоря. Одни лямбды чего стоят (в сравнении с плюсами). Жаль, что ниша C# — это скучный Enterprise, писать на нем — одно удовольствие (конечно, имхо, пробовал языков 5).
bool success = timer != nullptr;
SetThreadpoolTimer(timer, (PFILETIME)&relative_count, 0, 0);
return success;
}
void await_resume() {}
Не нравится мне что-то отсутствие обработки ошибок в этом коде. Если не удалось создать таймер — надо кинуть исключение, а не просто немедленно продолжить выполнение!
Как-то так должно быть:
void await_resume() {
if (!await_ready()) return;
if (!timer) throw …;
}
Ну или success надо делать полем, тогда будет проще:
void await_resume() {
if (!success) throw …;
}
Еще лучше будет сохранить в поле GetLastError()
…
АПДЕЙТ: код был изменен на основе отзывов. Смотрите комментарии.
Что-то я не вижу этих комментариев на Хабре. Вы уверены что эту строчку надо было переводить?
Корутины C++20 в примерах