没有EndInvoke的C#ThreadPool或BeginInvoke

时间:2011-10-03 20:53:34

标签: c# threadpool begininvoke fire-and-forget

网上有关于如何实施火灾和忘记模式的非常不同的意见。

有人说如果不必调用EndInvoke就调用BeginInvoke是没有问题的,如果必须实现一个fire-and-forget模式。

其他人说最好创建一个单独的ThreadPool对象。我关心的是ThreadPool的初始化成本。具体来说,调用方法只会将一个对象添加到队列中,然后返回。

为此,在池上创建线程或者只是同步调用该方法是“更快”吗?我想知道一个粗略的工作门槛,比在池上创建线程更昂贵。

是否有关于此问题的任何文件以及关于游泳池和其他场景的异常捕获的内容?

1 个答案:

答案 0 :(得分:2)

使用ThreadPool时,不要“在池上创建线程”,使用预先存在的线程或等到有一个线程可用。

只有当许多作业等待时,Pool才会添加另一个Thread,但是那个将被充分利用。

使用任务(Fx4及更高版本)更好。