Как проверить, является ли MarshalByRefObject действительным? - PullRequest
4 голосов
/ 10 февраля 2012

В проекте VS2010 C # у нас есть класс, производный от MarshalByRefObject, и мы используем Activator.GetObject для его установки.Мы используем этот производный класс для общения с машиной через сеть.

Иногда целевой компьютер включен и может быть проверен, но не запускает программу, с которой мы хотим поговорить, это вызывает 30-секундное ожидание, за которым следует исключение.Есть ли способ узнать, действителен ли мой производный MarshalByRefObject?

В настоящее время попытка / отлов обрабатывает эту ситуацию, но 30-секундное ожидание неприемлемо.

1 Ответ

4 голосов
/ 10 февраля 2012

Вы можете попробовать, чтобы Task вызывал метод Ping (), и использовать явное время ожидания для задачи ...

Task task = new Task(() => { try { obj.Ping(); } catch {} });
task.Start();
if(!task.Wait(1000)) throw new TimeoutException();
// handle other task exceptions etc
...