4

在 VS2010 C# 项目中,我们有一个派生自 MarshalByRefObject 的类,我们使用 Activator.GetObject 来设置它。我们正在使用这个派生类通过网络与机器通信。

有时目标机器已经打开并且能够被 ping,但它没有运行我们想要与之交谈的程序,这会导致等待 30 秒,然后出现异常。有没有办法判断我派生的 MarshalByRefObject 是否有效?

目前,try/catch 正在处理这种情况,但 30 秒的等待是不可接受的。

4

1 回答 1

4

您可以尝试让 Task 调用 Ping() 方法,并在任务上使用显式超时...

Task task = new Task(() => { try { obj.Ping(); } catch {} });
task.Start();
if(!task.Wait(1000)) throw new TimeoutException();
// handle other task exceptions etc
于 2012-02-10T17:51:05.380 回答