完成后我应该如何处理线程?离开它还是中止它?
Posted
技术标签:
【中文标题】完成后我应该如何处理线程?离开它还是中止它?【英文标题】:What should I do with a thread when it's done ? leave it or abort it? 【发布时间】:2011-01-13 05:22:05 【问题描述】:我在asp.net
应用程序中创建普通线程。线程完成后我该怎么办?离开它(它将返回线程池)或中止它。
Thread thread = new Thread(new ThreadStart(work));
【问题讨论】:
以这种方式创建线程不使用线程池。 那么如果我让这些线程退出上下文会发生什么? 正如 Ani 指出的那样,上面的代码并没有给你一个线程池线程。如果您使用 .NET 4,请查看 BackgroudWorker 甚至 Task 类。 您无需执行任何操作。一旦线程完成运行work
中的代码,它将退出。但是,启动新线程可能会非常昂贵,因此除非work
做大量工作,否则最好使用线程池线程,因为它通过重用线程来分摊创建线程的成本。
【参考方案1】:
离开它。创建一个毫无意义的异常是没有意义的。
【讨论】:
【参考方案2】:回想一下,IDisposable
接口的存在专门用于需要释放某些共享资源的场景。 (当然,它也被应用在其他情况下;但这就是它最初的用途。)
现在考虑托管Thread
类不实现IDisposable
,您可能(正确地)猜到它不需要除正常处理之外的任何特定清理由 GC。
【讨论】:
【参考方案3】:在 C# 中使用线程池
[STAThread]
public static void Main(string[] args)
foreach(var fileNamePath in DirectoryFiles)
ThreadPool.QueueUserWorkItem(ThreadPoolCallback, fileNamePath);
public void ThreadPoolCallback(object threadContext)
//do something
.NET 中的线程池处理所有其他事情。
【讨论】:
以上是关于完成后我应该如何处理线程?离开它还是中止它?的主要内容,如果未能解决你的问题,请参考以下文章
离开 Activity 时 Android 如何处理后台线程?