Так по сути это ничем не отличается от моего подхода кроме того, что фьючеры можно исполнять в других потоках (но мне это не подходит, т.к. мои асинхронные функции манипулируют одними и теми же объектами жса): если фьючеров суммарно за время работы программы было много (например, десятки тысяч), не было проблем?