如何在特定时间后返回函数

时间:2014-06-17 05:29:46

标签: c# .net httpwebrequest try-catch system.net.webexception

我有代理测试功能。在它里面我有一个catch块,并且在指定的时间(TIMEOUT)之后如果代理不好我返回一个错误的标志。问题是,即使没有例外,每10次函数会挂起一次。实际上HttpWebResponse.Timeout不能正常工作(或者它可能会工作,但我不知道如何使用它)。如果我的try ... catch没有捕获所有错误,如何让该方法在特定时间后自动返回false标志?

1 个答案:

答案 0 :(得分:1)

无法找到链接,我刚才在SO上找到了这个解决方案。

public class TimeoutInvoker
{
    public static void Run(Action action, int timeout)
    {
        var waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
        AsyncCallback callback = ar => waitHandle.Set();
        action.BeginInvoke(callback, null);

        if (!waitHandle.WaitOne(timeout))
            throw new TimeoutException("Timeout.");
    }
}

只需使用您的操作和超时作为args。 例如:

TimeoutInvoker.Run(()=>LongRunningFunction(), 60000);