Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复捕获超时异常?_C#_Multithreading_Timeoutexception - Fatal编程技术网

C# 如何修复捕获超时异常?

C# 如何修复捕获超时异常?,c#,multithreading,timeoutexception,C#,Multithreading,Timeoutexception,如何捕获TimeoutException 我想在3秒钟后捕获TimeoutException。 但3秒钟后,它会打印出TimeoutException,而太长了。暂停 使用控制台应用程序时,它不会捕获TimeoutException public static void work() { Thread.Sleep(3000); Console.WriteLine("TimeoutException"); throw new TimeoutException(); } p

如何捕获
TimeoutException

我想在3秒钟后捕获
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 : ~~~");
}

您可能捕获了错误的异常。根据microsoft文档(),您应该捕获TimeOutException类。

因为其他人都说您没有捕获好的异常。但这不是预期的答案,因为一个线程的错误无法从另一个线程捕获

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

您的案例示例如下:

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);
    }
}
公共静态无效工作()
{
睡眠(3000);
Console.WriteLine(“TimeoutException”);
抛出新的TimeoutException();
}
公共静态void Main(字符串[]args)
{
线程线程=新线程(()=>SafeExecute(()=>work(),Handler));
thread.Start();
Console.WriteLine(“结果:~~”;
Console.ReadLine();
}
私有静态无效处理程序(异常)
{
控制台写入线(例外);
}
私有静态void SafeExecute(操作测试、操作处理程序)
{
尝试
{
test.Invoke();
}
捕获(TimeoutException例外)
{
Console.WriteLine(“太长了,超时!”);
}
捕获(例外情况除外)
{
经办人(ex);
}
}

您正在捕获
ThreadInterruptedException
而不是
TimeoutException
您抛出的
TimeoutException()
工作
方法中,希望捕获
线程中断异常
?。