Библиотека предназначена для того, чтобы вызывающий поток ожидал, когда что-то завершится. Поскольку вы не можете изменить дизайн библиотеки, просто вызовите библиотеку из потока, которому больше нечего делать.
Когда вы разрабатываете взаимодействие, вы можете получить любую семантику, какую захотите. Если вы хотите, чтобы вызывающий поток получал результаты в удобное для себя время позже, вы можете использовать обещание / будущее. Вы можете спроектировать вызывающий поток так, чтобы он ожидал определенное количество времени, а затем тайм-аут. В случае тайм-аута вы можете проигнорировать результат, если он вам не нужен, или вы можете придумать способ проверить и получить результат позже. Вы также можете сделать так, чтобы поток, вызывающий библиотеку, делал все, что нужно с результатом, чтобы вызывающий поток не беспокоился об этом.
Просто поместите на карантин код, который вы не можете контролировать, и напишите любой код вокруг него, который вам нужен, чтобы получить поведение, необходимое вашему коду. Библиотеке нужен поток, который ее вызывает, чтобы дождаться ее завершения, поэтому изолируйте поток, который ее вызывает, и дайте библиотеке получить то, что она хочет.