Вычисление синхронное всегда? Не проще сделать асинхронным, и блокирующую версию отдельно? В асинхронном варианте использовать Callback, в блокирующем – выбрасывать exception
дальше добавить какой-нибудь интерфейс для прицепления мостов в эти ваши rx, корутины и прочее, чтобы оставить на откуп пользователю сложнейшую дилемму, что он хочет использовать
Вычисление синхронное всегда? Не проще сделать асинхронным, и блокирующую версию отдельно? В асинхронном варианте использовать Callback, в блокирующем – выбрасывать exception
несколько раз ноги ломали из-за того, что ошибка добавлялась туда, где её раньше не ожидали
а зачем в таких случаях ошибка, поинт владимира в том, что нужно это обрабатывать и выдавать не как ошибку, а какой-то результат (также @noraltavir говорил не использовать ошибки для ожидаемого поведения, потому что они дорогие)