如何在C#中修复捕获TimeoutException(线程)

时间:2019-07-29 07:21:03

标签: c# multithreading timeoutexception

如何捕获TimeoutException?

3秒后,我想在执行SearchProgram时捕获TimeoutException。 但是,在3秒钟后,尽管它在控制台上打印出“ TimeoutException”,但没有捕获TimeoutException。

谢谢

    public static void work()
    {
        Thread.Sleep(3000);
        Console.WriteLine("TimeoutException");
        throw new TimeoutException();
    }

    public static void Main(string[] args)
    {
        try
        {
            ThreadStart th = new ThreadStart(work);
            Thread t = new Thread(th);
            t.Start();
            //Execute SearchProgram
            t.Abort();
        }
        catch (ThreadInterruptedException)
        {
            Console.WriteLine("It's too long. Timeout!");
        }

    Console.WriteLine("Result : ~~~");
    }

2 个答案:

答案 0 :(得分:1)

正如其他人已经说过的那样,您没有抓住好例外。但这不是预期的答案,因为一个线程的错误无法从另一个线程捕获。

有几种处理这种情况的方法,可以在本answer中找到。

您的案例的示例:

git checkout develop <commit hash>_or_<specific-files-path>

答案 1 :(得分:0)

您可能正在捕获错误的异常。根据Microsoft文档(https://docs.microsoft.com/fr-fr/dotnet/api/system.timeoutexception?view=netframework-4.8),您应该捕获TimeOutException类。