Здравствуйте, m2user, Вы писали:
M>·>Лямбды тут непричём. Вообще.
M>·>wiring код немного поменяются. И собственно всё. Вся бизнес-логика остаётся как есть, и можно масштабировать старинный код, который все боятся трогать.
M>Можно и без лямбд, но Runnable/Callable при создании VirtualThread передать придется.
Не понял. Для реального треда тоже. И что?
m>>>(а если ещё вспомнить, что лямбды в Java не умеют захватывать неконстантные переменные в отличие от C#)
M>·>Шо?! Они переменные со стека не умеют захватывать только. Как собственно и в шарпе.
M>Разницу C# и Java применительно к захвату переменных лямбдами обсуждали тут: Класс для возврата значения из лямбды
Просто шарп компилятор создаёт класс, неявно делая переменную которая выглядит как на стеке полем класса.
Грабля как из javascript.
Лично мне подход java нравится больше, т.к. никакой магии не делается, всё явно, никаких сюрпризов.
M>Мне для получения результата Callable, обернутого в VirtualThread, придется к таким же ухищрениям прибегать, как в той теме?
У callable есть возвращаемое значение.
Ты, видимо, что-то не так понял. Для запуска треда хоть реального, хоть виртуального, тебе надо как-то передать код который будет там работать. Это везде так, и в C# и даже в C. И к сабжу это никакого отношения не имеет.
Для более удобных способов обмена данными между тредами есть свой инструментарий, очень много разного.
И никакого публичного класса VirtualThread нет. С сабжем у тебя в коде будет всё тот же класс Thread из java 1.0. Меняется только способ создания экземпляра класса.
m>>> Из статьи на которую ссылается TC, преимущество перед async/await неочевидно (там сравнение с async/await в Котлине)
m>>> (https://blog.rockthejvm.com/ultimate-guide-to-java-virtual-threads/)
M>·>С тем, что код тупой, обычный, синхронный, понятный любому индусу, без всякого мусора async/await, возможно написанный ещё до создания самого c#. Гугли "function coloring".
M>Ты утверждал, что код остается "плоским", однако из примеров в статье видно, что вложенность увеличивается
Увеличивается по сравнению с чем?
M>И что насчет перехвата исключений? Перехватывать нужно внутри VirtualThread?
Ничего не меняется. Как работало с обычными Thread, так и будет.
Иными словами, весь существующий threading API у тебя сохраняется как есть. А сабж даёт тебе возможность запустить миллион тредов.