C#多线程开发-处理⼦线程中的异常
C#多线程开发-处理⼦线程中的异常
在平时的多线程开发中,对于异常的处理是⾄关重要的,千万不能马虎。如果在实际的项⽬中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件⽆法使⽤。
其中需要说明的是,在⼦线程中产⽣的异常是⽆法在主线程被捕获到,也就是你即使在使⽤线程⽅法外有try/catch也⽆济于事,线程中的异常只能在线程中捕获并处理。
⽐如下⾯的例⼦,可以看到在创建线程的代码是在try/catch中的,按照常理来说,如果⼦线程中有异常发⽣那么外部的try/catch是可以正常收到异常通知的。
static void Main(string[] args)
{
try
{
Thread tempThread = new Thread(Test);
tempThread.Start();
}
catch (Exception ex)
{
Console.WriteLine("" + ex.Message);
}
}
private static void Test()
try catch的使用方法{
Thread.Sleep(100);
for (int i = 0; i < 100; i++)
{
Console.WriteLine("" + i);
if (i == 10)
{
throw new Exception("触发异常" + i);
}
}
}
运⾏上⾯的代码,可以看到程序⽆法在外部通过try/catch⽅法接收到异常,运⾏后软件会直接异常到⼦线程中,⽆法把异常再次往出抛。以后我们在使⽤线程/异步(也是⼀种特殊的线程)时要特别的留⼼。
然⽽正确的做法是在⼦线程中捕获并处理异常。把程序进⾏修改,下⾯就可以正确捕获到异常信息。
private static void Test()
{
Thread.Sleep(100);
try
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine("" + i);
if (i == 10)
{
throw new Exception("触发异常" + i);
}
}
}
catch (Exception ex)
{
Console.WriteLine("捕获的⼦线程中的异常信息:"+ex.Message);
}
}
看下⾯图⽚,程序就在⼦线程中捕获到了异常信息。
⼩寄语
⼈⽣短暂,我不想去追求⾃⼰看不见的,我只想抓住我能看的见的。
原创不易,给个关注。
我是阿辉,感谢您的阅读,如果对你有帮助,⿇烦点赞、转发 谢谢。欢迎关注: dotnet编程⼤全
技术: 需要进技术的添加⼩编mm1552923,备注:加;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论