Io ho risolto il problema usando un thread a parte con un apposito timeout.
Se il timeout scade e il thread risulta bloccato, accoppi il thread e segnali la cosa.