Как проверить, является ли 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