Сообщение Re[57]: Можно ли избавиться от async|await? от 13.01.2026 8:01
Изменено 13.01.2026 8:16 Serginio1
Re[57]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:
S>>>>Не дожидаясь результата записи
S>>·>Не надо так делать. Если тебе не важны результаты, то нафиг вообще его вызывать?
S>> То есть например при записи логов мне не нужно знать записался он или нет.
S>>Результат в записи лог мне не важен. Важно выполнение кода. Если в лог не записалось, то разбираться будем потом.
·>По идее это должна решать система логгирования. Если мы хотим не терять сообщения, то надо блокировать. Т.е. в самом коде должно быть
·>
·>А потом уже можно настроить по ходу — блокируемся ли, или начинаем дропать сообщения, или при переполнении очереди — начать слать куда-нибудь в другое место. Притом в зависимости от logger level.
Ну и вышла у тебя ошибка логирования. Останавливаем работу программы?
Или хрен с ним с логированием, но программ работает и самолет летит.
·>Но если тебе хочется запустить параллельно кусок кода, то ты просто запускаешь и... собственно всё:
·>
·>И не нужно дублировать каждый метод. Загляни в доку File — и посмотри, что там методов в два раза больше, чем могло бы быть!
Во запускаешь отдельный поток. И это упрощение?
S>>>>Обработка асинхронных задач по мере их выполнения (C#)
S>>·>Код сложнее. Сам же несколько сообщений назад согласился.
S>> Сложнее по сравнению с чем? Как ты с виртуальными потоками будешь делать WhenAny?
S>>Мне нужна первая выполненная задача!
·>Я уже показывал код с anySuccessfulOrThrow — ровно три строчки. Заметь, код, который ответственнен за параллелизацию находится строго внутри StructuredTaskScope. Весь другой код, и выше и ниже — обычный синхронный. Не надо по всему стеку протаскивать async/await и CancellableToken.
Еще раз мне нужно по WhenAny остановить все оставшиеся задачи либо для оставшихся задач вызвать WhenAny.
В твоем anySuccessfulResultOrThrow только первый вариант. Кстати привел бы код anySuccessfulResultOrThrow и потом уже говорил, что сложнее.
Ты так и не привел пример Обработка асинхронных задач по мере их выполнения (C#)
Написать такой метод и на C# несложно. Проблем нет.
S>>>>·>Потому что не могут. Синхронный код в c# не масштабируется.
S>>>> Еще раз несложно через Roslyn преобразовать код.
S>>·>Сложно. Потребуются виртуальные потоки.
S>> Ты не пользовался анализаторами и преобразователями кода. Сейчас с ИИ несложно набросать такой преобразователь.
S>>Виртуальные потоки хороши, но только для старого кода.
·>
S>>Если мы пишем новый код с 12 года, то виртуальные потоки говно ибо не универсальны.
S>>Кстати я могу Task создать через Task.Run или TaskCompletionSource. Как для виртуальных потоков создавать такие асинхронные методы
·>Никак. Зачем их создавать? Просто запускаешь поток, и всё.
S>>Виртуальные потоки Java 21 — чувак, где мой lock?
·>
Ты об этом уже писал, и я тебе уже про это отвечал. Хинт: Java 25.
Угу. А ещё выйдет 26. А таски работают с 12 года, а вы нормальную асинхронную систему сделать до сих пор не можете и хвалитесь при этом.

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#)
Написать такой метод и на C# несложно. Проблем нет.
S>>>>·>Потому что не могут. Синхронный код в c# не масштабируется.
S>>>> Еще раз несложно через Roslyn преобразовать код.
S>>·>Сложно. Потребуются виртуальные потоки.
S>> Ты не пользовался анализаторами и преобразователями кода. Сейчас с ИИ несложно набросать такой преобразователь.
S>>Виртуальные потоки хороши, но только для старого кода.
·>
S>>Если мы пишем новый код с 12 года, то виртуальные потоки говно ибо не универсальны.
S>>Кстати я могу Task создать через Task.Run или TaskCompletionSource. Как для виртуальных потоков создавать такие асинхронные методы
·>Никак. Зачем их создавать? Просто запускаешь поток, и всё.
S>>Виртуальные потоки Java 21 — чувак, где мой lock?
·>
Угу. А ещё выйдет 26. А таски работают с 12 года, а вы нормальную асинхронную систему сделать до сих пор не можете и хвалитесь при этом.
Re[57]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:
S>>>>Не дожидаясь результата записи
S>>·>Не надо так делать. Если тебе не важны результаты, то нафиг вообще его вызывать?
S>> То есть например при записи логов мне не нужно знать записался он или нет.
S>>Результат в записи лог мне не важен. Важно выполнение кода. Если в лог не записалось, то разбираться будем потом.
·>По идее это должна решать система логгирования. Если мы хотим не терять сообщения, то надо блокировать. Т.е. в самом коде должно быть
·>
·>А потом уже можно настроить по ходу — блокируемся ли, или начинаем дропать сообщения, или при переполнении очереди — начать слать куда-нибудь в другое место. Притом в зависимости от logger level.
Ну и вышла у тебя ошибка логирования. Останавливаем работу программы?
Или хрен с ним с логированием, но программ работает и самолет летит.
·>Но если тебе хочется запустить параллельно кусок кода, то ты просто запускаешь и... собственно всё:
·>
·>И не нужно дублировать каждый метод. Загляни в доку 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 года, а вы нормальную асинхронную систему сделать до сих пор не можете и хвалитесь при этом.

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?
·>
Угу. А ещё выйдет 26. А таски работают с 12 года, а вы нормальную асинхронную систему сделать до сих пор не можете и хвалитесь при этом.