Re[63]: Можно ли избавиться от async|await?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.01.26 12:35
Оценка:
Здравствуйте, ·, Вы писали:


S>>По Task я вижу, что метод асинхронный и могу использовать либо параллельно, либо последовательно через await.

·>А с виртуальными тредами ты видишь любой метод и можешь использовать либо параллельно, либо последовательно без всякого await-шлака.

Ты не понял. Есть IO методы или методы получающие результат по событию (та же асинхронная очередь). Они не напрягают CPU поэтому видя такой метод я предпочту параллельное выполнение.

await ничем не хуже
Опять же
private static readonly AsyncLock _lock = new AsyncLock();
Task<Product> coreApi(long id) {
  var d1 = readFromFile(id); // возвращает Task не дожидаемся результата
  var d2 = queryDb(id, d1);  // возвращает Task не дожидаемся результата
  using (await _lock.LockAsync())
 {
  var d3 = await downloadFromRestApi(id, d2, d1); // внутри downloadFromRestApi дожидаемся выполнения d2 и d1
  return new Product(d3, await d1);
}
}


И вот сравни такой подход c StructuredTaskScope

На самом деле Task были придуманы еще в 12 году. В Яве виртуальные потоки появились значительно позже, а StructuredTaskScope так вообще еще превью.
Виртуальные потоки однозначно хороши для синхронного кода. Но что касается асинхронного, то тут нет однозначности.
Я предпочитаю Task. Task async await показывают как я использую метод как задачу или результат задачи.
И предпочту рефакторинг кода.

Засим откланиваюсь.
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.