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

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

Изменено 13.01.2026 8:30 Serginio1

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


S>>>>Не дожидаясь результата записи

S>>·>Не надо так делать. Если тебе не важны результаты, то нафиг вообще его вызывать?
S>> То есть например при записи логов мне не нужно знать записался он или нет.
S>>Результат в записи лог мне не важен. Важно выполнение кода. Если в лог не записалось, то разбираться будем потом.
·>По идее это должна решать система логгирования. Если мы хотим не терять сообщения, то надо блокировать. Т.е. в самом коде должно быть
·>
·>logger.info("message");
·>

·>А потом уже можно настроить по ходу — блокируемся ли, или начинаем дропать сообщения, или при переполнении очереди — начать слать куда-нибудь в другое место. Притом в зависимости от logger level.

Ну и вышла у тебя ошибка логирования. Останавливаем работу программы?
Или хрен с ним с логированием, но программ работает и самолет летит.

·>Но если тебе хочется запустить параллельно кусок кода, то ты просто запускаешь и... собственно всё:

·>
·>Thread.ofVirtual().start(() -> File.WriteAllBytes("file1"));
·>

·>И не нужно дублировать каждый метод. Загляни в доку File — и посмотри, что там методов в два раза больше, чем могло бы быть!

Во запускаешь отдельный поток. И это упрощение?

S>>>>Обработка асинхронных задач по мере их выполнения (C#)

S>>·>Код сложнее. Сам же несколько сообщений назад согласился.
S>> Сложнее по сравнению с чем? Как ты с виртуальными потоками будешь делать WhenAny?
S>>Мне нужна первая выполненная задача!
·>Я уже показывал код с anySuccessfulOrThrow — ровно три строчки. Заметь, код, который ответственнен за параллелизацию находится строго внутри StructuredTaskScope. Весь другой код, и выше и ниже — обычный синхронный. Не надо по всему стеку протаскивать async/await и CancellableToken.

Еще раз мне нужно по WhenAny остановить все оставшиеся задачи либо для оставшихся задач вызвать WhenAny.
В твоем anySuccessfulResultOrThrow только первый вариант. Кстати привел бы код anySuccessfulResultOrThrow и потом уже говорил, что сложнее.
Ты так и не привел пример Обработка асинхронных задач по мере их выполнения (C#)

Там есть Task.WhenEach.

Что касается StructuredTaskScope то такой метод и на C# несложно. Проблем нет.

S>>>>·>Потому что не могут. Синхронный код в c# не масштабируется.

S>>>> Еще раз несложно через Roslyn преобразовать код.
S>>·>Сложно. Потребуются виртуальные потоки.
S>> Ты не пользовался анализаторами и преобразователями кода. Сейчас с ИИ несложно набросать такой преобразователь.
S>>Виртуальные потоки хороши, но только для старого кода.
·>

S>>Если мы пишем новый код с 12 года, то виртуальные потоки говно ибо не универсальны.

S>>Кстати я могу Task создать через Task.Run или TaskCompletionSource. Как для виртуальных потоков создавать такие асинхронные методы
·>Никак. Зачем их создавать? Просто запускаешь поток, и всё.

S>>Виртуальные потоки Java 21 — чувак, где мой lock?

·> Ты об этом уже писал, и я тебе уже про это отвечал. Хинт: Java 25.

Угу. А ещё выйдет 26. А таски работают с 12 года, а вы нормальную асинхронную систему сделать до сих пор не можете и хвалитесь при этом.
Re[57]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:


S>>>>Не дожидаясь результата записи

S>>·>Не надо так делать. Если тебе не важны результаты, то нафиг вообще его вызывать?
S>> То есть например при записи логов мне не нужно знать записался он или нет.
S>>Результат в записи лог мне не важен. Важно выполнение кода. Если в лог не записалось, то разбираться будем потом.
·>По идее это должна решать система логгирования. Если мы хотим не терять сообщения, то надо блокировать. Т.е. в самом коде должно быть
·>
·>logger.info("message");
·>

·>А потом уже можно настроить по ходу — блокируемся ли, или начинаем дропать сообщения, или при переполнении очереди — начать слать куда-нибудь в другое место. Притом в зависимости от logger level.

Ну и вышла у тебя ошибка логирования. Останавливаем работу программы?
Или хрен с ним с логированием, но программ работает и самолет летит.

·>Но если тебе хочется запустить параллельно кусок кода, то ты просто запускаешь и... собственно всё:

·>
·>Thread.ofVirtual().start(() -> File.WriteAllBytes("file1"));
·>

·>И не нужно дублировать каждый метод. Загляни в доку File — и посмотри, что там методов в два раза больше, чем могло бы быть!

Во запускаешь отдельный поток. И это упрощение?

S>>>>Обработка асинхронных задач по мере их выполнения (C#)

S>>·>Код сложнее. Сам же несколько сообщений назад согласился.
S>> Сложнее по сравнению с чем? Как ты с виртуальными потоками будешь делать WhenAny?
S>>Мне нужна первая выполненная задача!
·>Я уже показывал код с anySuccessfulOrThrow — ровно три строчки. Заметь, код, который ответственнен за параллелизацию находится строго внутри StructuredTaskScope. Весь другой код, и выше и ниже — обычный синхронный. Не надо по всему стеку протаскивать async/await и CancellableToken.

Еще раз мне нужно по WhenAny остановить все оставшиеся задачи либо для оставшихся задач вызвать WhenAny.
В твоем anySuccessfulResultOrThrow только первый вариант. Кстати привел бы код anySuccessfulResultOrThrow и потом уже говорил, что сложнее.
Ты так и не привел пример Обработка асинхронных задач по мере их выполнения (C#)

Там есть Task.WhenEach.

await foreach (Task<int> t in Task.WhenEach(downloadTasks))
    {
        total += await t;
    }

Что касается StructuredTaskScope то такой метод и на C# несложно. Проблем нет.

S>>>>·>Потому что не могут. Синхронный код в c# не масштабируется.

S>>>> Еще раз несложно через Roslyn преобразовать код.
S>>·>Сложно. Потребуются виртуальные потоки.
S>> Ты не пользовался анализаторами и преобразователями кода. Сейчас с ИИ несложно набросать такой преобразователь.
S>>Виртуальные потоки хороши, но только для старого кода.
·>

S>>Если мы пишем новый код с 12 года, то виртуальные потоки говно ибо не универсальны.

S>>Кстати я могу Task создать через Task.Run или TaskCompletionSource. Как для виртуальных потоков создавать такие асинхронные методы
·>Никак. Зачем их создавать? Просто запускаешь поток, и всё.

S>>Виртуальные потоки Java 21 — чувак, где мой lock?

·> Ты об этом уже писал, и я тебе уже про это отвечал. Хинт: Java 25.

Угу. А ещё выйдет 26. А таски работают с 12 года, а вы нормальную асинхронную систему сделать до сих пор не можете и хвалитесь при этом.