У меня есть API с закрытым исходным кодом для некоторого аппаратного датчика, который я использую для запроса этого датчика. API поставляется в виде DLL, которую я использую для взаимодействия с C#. Функции API блокируются. Обычно они возвращают значения ошибок, но в некоторых случаях они просто не возвращаются.
Мне нужно иметь возможность обнаружить эту ситуацию и в этом случае убить заблокированный поток. Как это можно сделать на С#?
Поток, в котором они вызываются, создается с помощью BackgroundWorker. Я ищу простую сторожевую собаку для блокировки вызовов функций, которую я могу настроить перед вызовом функции и сбросить, когда вернусь. Он должен просто сидеть там и ждать, пока я вернусь. Если я этого не сделаю, он убьет поток, чтобы 1) API снова освободился, и ни один поток моего приложения все еще не зависал и не делал что-нибудь, если оно в конечном итоге вернется, и 2) я могу принять другие меры по восстановлению, такие как повторная инициализация API, чтобы продолжить работу с ним.