Как проверить, является ли MarshalByRefObject действительным?

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

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

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

1 ответ

Решение

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

Task task = new Task(() => { try { obj.Ping(); } catch {} });
task.Start();
if(!task.Wait(1000)) throw new TimeoutException();
// handle other task exceptions etc
Другие вопросы по тегам