Не ясно, что на самом деле является «промежуточным результатом».Интерфейсы, используемые в пакете параллелизма, просто не определяют это, а предполагают методы, которые напоминают более или менее чистые функции.
Следовательно, вместо этого:
interim = compute something
finalresult = compute something else
делает что-то вроде этого:
interim = compute something
final1 = new Pair( interim, fork(new Future() { compute something else }) )
(Псевдокод, мысль, которая передает идею, а не компилируемый код)
РЕДАКТИРОВАТЬ Идея такова: вместо запуска одного монолитного блока вычислений (который достигаетсостояние, в котором доступны некоторые «промежуточные результаты») разбить его так, чтобы первая задача возвращала прежний «промежуточный» результат, и в то же время размечать вторую задачу, которая вычисляет конечный результат.Конечно, дескриптор этой задачи должен быть доставлен вызывающей стороне, чтобы в конечном итоге он мог получить конечный результат.Обычно это делается с помощью интерфейса Future.