Для меня, кажется, хорошо. Использование try ... finally также является хорошим моментом, поскольку поток можно использовать повторно, и вы можете поддерживать контекст в течение долгого времени, избегая сбора мусора.
Не думайте, что есть другой способ решить эту проблему.
Однако будьте осторожны, чтобы вызываемый API не создавал проблем в этой многопоточной среде.
Не весь код является потокобезопасным, выполняя операции записи или операции чтения, которые включают запись \ чтение некоторого кэшированного значения.
Будьте внимательны и к тому, что значения полей не могут передаваться правильно и \ или во времени из одного потока в другой, если они не являются изменчивыми или если System.Threading.Interlocked не используется!
Это может создать вам проблемы, особенно в сборках релиза.
Однако вы можете использовать Thread.MemoryBarrier или lock, найти в Интернете эту досадную (но неизбежную) проблему.