пусть мемоизированная функа при самом входе проверяет, запущен ли расчёт на данном наборе данных, если запущен, то поток лочится в ожидании завершения расчёта.
если не запущен, то ставить отметку, что запущен и запустить расчёт.
если расчёт завершён, то вернуть мемоизированное значение
кажется должно сработать.