Проблема как раз в том, что в случае ошибки нам придется добавлять точки синхронизации, чтобы привести систему в какое-то вменяемое состояние (либо каким-то не очевидным откатывать до состояния). Но ошибка происходит внезапно и произвольно, соответственно нельзя заранее определить, можно ли запустить какую-то задачу.
Банальный пример: в Однопоточном приложении мы генерируем данные, затем их пишем в файл. Время O(N + K). В двупоточном мы можем сократить время до O(max(N, K)), но если на стадии генерации происходит ошибка, то с записанными данными происходит проблема