C#中的线程池使用(二)

线程池是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。每个进程只有一个线程池对象。

下面说一下线程池中的异常,在线程池中未处理的异常将终止进程。以下为此规则的三种例外情况:

(1)由于调用了Abort,线程池线程中将引发ThreadAbortException异常(在对Abort方法进行调用时引发的异常)。

(2)由于正在卸载应用程序域,线程池线程中将引发AppDomainUnloadedException异常(在尝试访问已卸载的应用程序域时引发的异常)。

(3)公共语言运行库或宿主进程将终止线程。

如果公共语言运行库所创建的线程中未处理这些异常中的任何一个,则异常将终止线程,但公共语言运行库不允许该异常继续下去。

如果在主线程或从非托管代码进入运行库的线程中未处理这些异常,则它们将正常继续,并导致应用程序终止。

注意在 .NET Framework 1.0 和 1.1 版中,公共语言运行库将捕获线程池中的未处理异常,而不出现任何提示。这可能会破坏应用程序状态,并最终导致应用程序挂起,将很难进行调试。

使用线程池的方式主要有4种,下面分别对其进行介绍。

1.ThreadPool类的QueueUserWorkItem方法

在使用线程池时,可以从托管代码中调用ThreadPool类的QueueUserWorkItem方法,或从非托管代码中调用CorQueueUserWorkItem方法,并用线程池线程要执行的回调方法WaitCallback执行线程池。

QueueUserWorkItem方法将方法排入队列以便执行(并指定包含该方法所用数据的对象,用state参数来实现)。此方法在有线程池线程变得可用时执行。该方法有两个语法形式,其语法如下:

public static bool QueueUserWorkItem(WaitCallback callBack) public static bool QueueUserWorkItem(WaitCallback callBack,Object state)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssdfs.html