c# - 确实在 'using' block 中中止线程处理已使用的实例

标签 c# multithreading

我正在开始这样的话题:

nameOfThread = new Thread(() => 
{
    //do stuff
});
nameOfThread.Start();

在这个匿名函数中的某个时刻,我打开了一个 WinSCP session ,如下所示:

using (Session session = new Session())
{
     //do stuff
}

如果我像这样中止线程(从其他地方)nameOfThread.Abort(),同时仍在 using 中做一些事情, session 是否在最后处理?

最佳答案

很可能会,但是 you can't be sure .

根据文档:

When this method [Abort] is invoked on a thread, the system throws a ThreadAbortException in the thread to abort it.

而且我们知道异常仍然会让 using 语句处理,正如它们应该的那样。 (给出和接受一些异常(exception))

另一方面,如果您可以优雅地结束线程,例如使用 CancellationTokenSource,这对您的应用来说会好很多。它将对线程的实际终止和异常处理提供更多控制。

关于c# - 确实在 'using' block 中中止线程处理已使用的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53500763/

相关文章:

multithreading - CPU 使用率与线程数

c# - 如何从 gridview 访问文本框文本到按钮 Onclick 事件

c# - .net 核心控制台在 x64 系统上作为 x86 运行

c# - Entity Framework 模型到具有索引属性的数据库

multithreading - Matlab 'svd'在N个线程上

javascript - 在 Javascript 中访问对象时自动调用函数

c# - Silverlight 4:将文件上传到服务器

c# - 是否可以在解决方案资源管理器中看不到窗体图标的情况下使用 C# 部分 WinForm 类文件?

c# - 如何在线程中旋转这两个进程?

c# - 多个线程向一个列表添加元素。为什么列表中的项目总是比预期的少?