Согласно моим (ограниченным) знаниям, не существует общего способа сделать это. Это потому, что у вас может быть одна бесперебойная, удаленная задача, у вас может быть одна задача, которая является чистой функцией и, следовательно, безопасной для уничтожения, у вас может быть много подзадач (как упомянул nerdytenor - проверка состояния isInterrupted между каждой), вы можете иметь смесь все, у вас может быть задача, которая, если ее убить, переведет другие задачи в состояние глобальной блокировки ... Насколько я знаю, вы должны сделать это сами.
Какие расчеты вы выполняете? Вы можете сделать что-нибудь внутри? Может быть, создать глобальную поточно-ориентированную таблицу toInterrupt и проверить в каждой подзадаче, будет ли отменена вся задача? Я знаю, что это очень не идиоматично, но пока не могу придумать ничего лучшего.
Или, если это действительно чисто функциональные вычисления, и вы действительно в этом уверены - убейте процесс / поток и надейтесь, что вы правы.