在VS2010 C#项目中,我们有一个派生自MarshalByRefObject的类,我们使用Activator.GetObject来设置它。我们正在使用此派生类与网络上的计算机进行通信。
有时目标计算机已打开且能够被ping,但它没有运行我们想要与之通信的程序,这导致等待30秒,然后是异常。有没有办法判断我的派生MarshalByRefObject是否有效?
目前try / catch正在处理这种情况,但是30秒的等待是不可接受的。
答案 0 :(得分: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