【问题标题】:How to fix catching TimeoutException? [duplicate]如何修复捕获 TimeoutException? [复制]
【发布时间】:2019-12-06 12:03:28
【问题描述】:

我怎样才能捕捉到TimeoutException

我想在 3 秒后赶上 TimeoutException。 但 3 秒后它会打印出 TimeoutExceptionIt's too long. Timeout! 是预期的。

console application 无法捕获 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 : ~~~");
}

【问题讨论】:

标签: c# multithreading timeoutexception


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    你的例子:

    public static void work()
    {
        Thread.Sleep(3000);
        Console.WriteLine("TimeoutException");
        throw new TimeoutException();
    }
    
    public static void Main(string[] args)
    {
        Thread thread = new Thread(() => SafeExecute(() => work(), Handler));
        thread.Start();
    
        Console.WriteLine("Result : ~~~");
        Console.ReadLine();
    }
    
    private static void Handler(Exception exception)
    {
        Console.WriteLine(exception);
    }
    
    private static void SafeExecute(Action test, Action<Exception> handler)
    {
        try
        {
            test.Invoke();
        }
        catch (TimeoutException ex)
        {
            Console.WriteLine("It's too long. Timeout!");
        }
        catch (Exception ex)
        {
            Handler(ex);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2018-04-11
      • 2012-12-08
      • 2023-03-30
      • 2020-04-23
      • 2017-08-27
      相关资源
      最近更新 更多