Информация об изменениях

Сообщение Re[61]: Можно ли избавиться от async|await? от 13.01.2026 10:54

Изменено 13.01.2026 11:06 Serginio1

Re[61]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:


S>>·>Раз 5 ответил.

S>> Покажи пример. Напимер асинхронной очереди
S>>AsyncProducerConsumerCollection
·>Зачем тебе асинхронная очередь при наличии виртуальных тредов? Используй обычный BlockingQueue.
·>Впрочем, пишется очень похожим образом, если очень надо, используя CompletableFuture.

Я не пишу на Java мне интересно как для TaskCompletionSource прикурутить виртуальные потоки.



static ProductPayload fetchProduct(long id) throws Exception {
    ThreadFactory named = Thread.ofVirtual().name("prod-%d", 1).factory();

    try (var scope = StructuredTaskScope.open(
        StructuredTaskScope.Joiner.<Object>allSuccessfulOrThrow(),
        cfg -> cfg.withTimeout(Duration.ofSeconds(1))
            .withThreadFactory(named))) {

      StructuredTaskScope.Subtask<Product> core = scope.fork(() -> coreApi(id));
      StructuredTaskScope.Subtask<Stock> stock = scope.fork(() -> stockApi(id));
      StructuredTaskScope.Subtask<Price> price = scope.fork(() -> priceApi(id));

      scope.join(); // throws on first failure / timeout
      return new ProductPayload(core.get(), stock.get(), price.get());
    }
  }

  void main() throws Exception {
    ProductPayload productPayload = fetchProduct(1L);
    System.out.println(productPayload);
  }


С аналогом Run.Task разобрался. Но чем это лучше Task в упор не вижу.

S>>>>Читаю

S>>·>Попробуй ещё понять.
S>>Что бы понять, надо код привести. Ты пока только приводил код с StructuredTaskScope и дал ссылку на аналог TaskCompletionSource.
·>А что тебе ещё надо? Ты ещё сам приводил ссылку на какую-то статью с десятком примеров кода.

Там аналога TaskCompletionSource нет. И сам же говоришь, что StructuredTaskScope еще превью.

S>>·>Эта та же проблема с synchronized, которая давно пофикшена, третий раз на ту же граблю наступаешь

S>>·>Мне надоело.
S>> Ты читаешь только то, что тебе интересно.
·>Что, по-твоему, я не читаю?

S>>Покажи как добавить свои методы, что бы они выполнялись асинхронно.

·>Куда добавить? Зачем асинхронно?

S>> В C# можно просто добавить

S>>
S>>await Task.Yield();
S>>

S>>Правда он и будет возвращать Task.
S>> Для Java должен быть метод двойник возвращающий Future?
·>Зачем? Просто Thread.yield()

Ну с этим согласен. Хорошо сделали. Но вот StructuredTaskScope с джойнерами не ахти то и читаемо.
То есть не вижу особенных выгод по сравнению с Task.
По Task я вижу, что метод асинхронный и могу использовать либо параллельно, либо последовательно через await
Re[61]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:


S>>·>Раз 5 ответил.

S>> Покажи пример. Напимер асинхронной очереди
S>>AsyncProducerConsumerCollection
·>Зачем тебе асинхронная очередь при наличии виртуальных тредов? Используй обычный BlockingQueue.
·>Впрочем, пишется очень похожим образом, если очень надо, используя CompletableFuture.

Я не пишу на Java мне интересно как для TaskCompletionSource прикурутить виртуальные потоки.



static ProductPayload fetchProduct(long id) throws Exception {
    ThreadFactory named = Thread.ofVirtual().name("prod-%d", 1).factory();

    try (var scope = StructuredTaskScope.open(
        StructuredTaskScope.Joiner.<Object>allSuccessfulOrThrow(),
        cfg -> cfg.withTimeout(Duration.ofSeconds(1))
            .withThreadFactory(named))) {

      StructuredTaskScope.Subtask<Product> core = scope.fork(() -> coreApi(id));
      StructuredTaskScope.Subtask<Stock> stock = scope.fork(() -> stockApi(id));
      StructuredTaskScope.Subtask<Price> price = scope.fork(() -> priceApi(id));

      scope.join(); // throws on first failure / timeout
      return new ProductPayload(core.get(), stock.get(), price.get());
    }
  }

  void main() throws Exception {
    ProductPayload productPayload = fetchProduct(1L);
    System.out.println(productPayload);
  }


С аналогом Run.Task разобрался. Но чем это лучше Task в упор не вижу.

S>>>>Читаю

S>>·>Попробуй ещё понять.
S>>Что бы понять, надо код привести. Ты пока только приводил код с StructuredTaskScope и дал ссылку на аналог TaskCompletionSource.
·>А что тебе ещё надо? Ты ещё сам приводил ссылку на какую-то статью с десятком примеров кода.

Там аналога TaskCompletionSource нет. И сам же говоришь, что StructuredTaskScope еще превью.

S>>·>Эта та же проблема с synchronized, которая давно пофикшена, третий раз на ту же граблю наступаешь

S>>·>Мне надоело.
S>> Ты читаешь только то, что тебе интересно.
·>Что, по-твоему, я не читаю?

S>>Покажи как добавить свои методы, что бы они выполнялись асинхронно.

·>Куда добавить? Зачем асинхронно?

S>> В C# можно просто добавить

S>>
S>>await Task.Yield();
S>>

S>>Правда он и будет возвращать Task.
S>> Для Java должен быть метод двойник возвращающий Future?
·>Зачем? Просто Thread.yield()

Ну с этим согласен. Хорошо сделали. Но вот StructuredTaskScope с джойнерами не ахти то и читаемо.
То есть не вижу особенных выгод по сравнению с Task.
По Task я вижу, что метод асинхронный и могу использовать либо параллельно, либо последовательно через await.


С виртуальными потоками все в одну кучу.
Ну я рад за вас, что вам радостно.