我有一个线程正在分析文件并对数据库进行事务调用,每个事务都有一个审计条目作为其事务的一部分。调用 Thread.Abort() 来停止文件的处理有什么大问题吗?而不是到处散布丑陋的安全点?
该文件将在 Abort 调用后关闭。
我有一个线程正在分析文件并对数据库进行事务调用,每个事务都有一个审计条目作为其事务的一部分。调用 Thread.Abort() 来停止文件的处理有什么大问题吗?而不是到处散布丑陋的安全点?
该文件将在 Abort 调用后关闭。
明显的问题是放弃事务的风险,这可能导致阻塞一段不确定的时间(或直到超时)。但是你可以摆脱各种混乱——不可恢复的Monitor
锁、信号量等、内存泄漏等。
简而言之:尽量避免必须中止线程,除非您确切知道它当时在做什么。你知道它在做什么的唯一方法是它是否已经在一个已知的“安全点”(用你的术语)——所以你最好抛出一个异常或其他东西,让它以一种有管理的方式自我提升.
最佳实践:仅在您终止进程时中止线程。
尝试 Thread.Interrupt() 强制线程退出其等待状态。