C#线程池或不带EndInvoke的BeginInvoke

C#线程池或不带EndInvoke的BeginInvoke,c#,threadpool,begininvoke,fire-and-forget,C#,Threadpool,Begininvoke,Fire And Forget,在网络上,对于如何实施“火与忘”模式,存在着非常不同的意见 有人说,如果必须实现fire-and-forget模式,那么在不调用EndInvoke的情况下调用BeginInvoke是没有问题的 其他人说最好创建一个单独的线程池对象。我关心的是线程池初始化成本。具体来说,要调用的方法只向队列添加对象,然后返回 为此,在池上创建线程是“更快”还是简单地同步调用该方法?我想知道一个粗略的工作阈值,它比在池中创建线程更昂贵 有关于此的文档吗?池上的异常捕获和其他restcritions如何?当使用线程池

在网络上,对于如何实施“火与忘”模式,存在着非常不同的意见

有人说,如果必须实现fire-and-forget模式,那么在不调用EndInvoke的情况下调用BeginInvoke是没有问题的

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

为此,在池上创建线程是“更快”还是简单地同步调用该方法?我想知道一个粗略的工作阈值,它比在池中创建线程更昂贵


有关于此的文档吗?池上的异常捕获和其他restcritions如何?

当使用线程池时,您不“在池上创建线程”,而是使用预先存在的线程,或者等待一个线程可用

只有当许多作业等待时,池才会添加另一个线程,但之后该线程将得到很好的利用


更好地使用任务(Fx4和更高版本)

因此,与BeginInvoke替代方案相比,打电话到泳池是非常便宜的?@BrokenGlass谢谢,这对我来说是新的。主要问题仍然存在:这个电话的费用是多少?Juergen,很难给出确切的答案,但门槛很低。使用TP意味着创建、排队和调用委托。当你的方法看起来做的不止这些时,把它排成队列。如果你“简单地同步调用这个方法”,你就不会做“触发并忘记”。所以我相信你的选择是线程池、自己创建线程(var t=new Thread())或TPL。是的,但主要问题是哪种方法更快。我想我可以写一个简单的度量,然后平均比较结果。synchron调用可能会更快,因为它返回的速度比对静态线程池的调用快。