我有一些在.net 3.5中编写的旧代码
我需要添加一些功能,以使用超时=>调用某些方法(io method),这意味着X秒后,如果未完成,则需要引发异常。
无法使用Task,因为在.net 3.5上没有Task。怎么做 ?
您可以使用您的方法创建一个具有相同签名的委托(我们希望看到它:),然后使用BeginInvoke
调用它,并使用WaitOne()
方法在超时的情况下阻止当前线程
public delegate void AsyncMethodCaller(...);
AsyncMethodCaller caller = new AsyncMethodCaller();
IAsyncResult result = caller.BeginInvoke(...);
result.AsyncWaitHandle.WaitOne(timeout);
if(!result.IsCompleted)
{
//throw an exception
}