Здравствуйте, mrTwister, Вы писали:
T>Проблема в том, что через таски в C# убить можно случайно и незаметно в процессе порезания помидора. Например, можно сделать невинное свиду исправление, которое в какую-то синхронную функцию добавляет синхронный блокирующий вызов. Казалось бы, что такого: в синхронную функцию добавили синхронный выызов, что такого? Но потом оказывается, что это был первый блокирующий вызов в этой цепочке синхронных функций, которая инициируется из асинхронного контекста. И вуаля, асинхронный контекст заблокирован. И проверить это исправление на ревью или линтером очень сложно, потому что надо анализировать весь стек вызовов, а у нас все обмазано интерфейсами, абстрактными фабриками и поздним связыванием, и какой получится стек вызовов станет известно только в рантайме
Согласен, бывает сплошь и рядом. Но ты так говоришь будто в GoLang это как-то решается. Оно решается?
T>Главная разница в том, что нет двух видов "цветов" функций. Нет никаких синхронных и асинхронных контекстов, которые надо постоянно учитывать.
Как же его нет, если ты или return пишешь или в каналы шлешь?