如何在旧版.net 3.5上超时调用函数

问题描述 投票:-1回答:1

我有一些在.net 3.5中编写的旧代码

我需要添加一些功能,以使用超时=>调用某些方法(io method),这意味着X秒后,如果未完成,则需要引发异常。

无法使用Task,因为在.net 3.5上没有Task。怎么做 ?

c# .net-3.5
1个回答
0
投票

您可以使用您的方法创建一个具有相同签名的委托(我们希望看到它:),然后使用BeginInvoke调用它,并使用WaitOne()方法在超时的情况下阻止当前线程

public delegate void AsyncMethodCaller(...);

AsyncMethodCaller caller = new AsyncMethodCaller();

IAsyncResult result = caller.BeginInvoke(...);

result.AsyncWaitHandle.WaitOne(timeout);

if(!result.IsCompleted)
{
    //throw an exception
}
© www.soinside.com 2019 - 2024. All rights reserved.