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()
在工作
方法中,希望捕获线程中断异常
?。