C# 线程中止安全性

本文关键字:安全性 线程 | 更新日期: 2023-09-27 17:56:53

Using

SqlDataSourceEnumerator.Instance.GetDataSources();

在正在运行的线程中,调用线程是否安全。Abort() 仍在运行时终止进程?

注意:这是后台辅助角色中的一个线程。我需要能够取消后台工作线程,但如果那一行阻塞,则不能

C# 线程中止安全性

如果线程在非托管代码中阻塞,Thread.Abort()在线程返回到托管代码之前不会执行任何操作,您似乎在注释中承认了这一点。

所以这个问题有点不清楚 - 调用Thread.Abort()本质上是安全的,因为它只会中止在托管代码中运行的线程。 因此,当您说"安全吗"时,您会担心什么危险?

如果需要能够中止非托管调用,一种方法是在单独的进程中剥离它们,以便可以使用 Process.Kill()。 然后,您将处理清理的工作交给操作系统。 当然,不利的一面是,您必须执行一些样板代码才能将数据发送到进程/从流程发送数据。

我认为任何人都不能完全保证这一点,因为有许多非托管库通过数据库连接被调用。

该服务用户的最佳做法是处理与 sql 连接相关的所有一次性对象,并且您应该期望安全。

因此,只要妥善处理所有一次性物品,在这里流产就可以了。