C# ThreadPool 或 BeginInvoke(不带 EndInvoke)
在网上,对于如何实现即发即忘模式存在着截然不同的观点。
有人说,如果必须实现“即发即弃”模式,那么调用 BeginInvoke 而不调用 EndInvoke 是没有问题的。
其他人说最好创建一个单独的 ThreadPool 对象。我担心的是线程池初始化成本。具体来说,调用的方法仅将对象添加到队列中,然后返回。
为此,在池上创建线程还是简单地同步调用方法“更快”?我想知道一个粗略的工作阈值,它比在池上创建线程更昂贵。
是否有任何关于此的文档以及池上的异常捕获和其他限制?
On the net there a very different opinions on how to implement a fire and forget pattern.
Some say that it is no issue to call BeginInvoke without calling EndInvoke if one has to implement a fire-and-forget pattern.
Others say it's better to create a separate ThreadPool object. My concern is about the ThreadPool initialization cost. Specifically, the the method to call does only add an object to a queue and then returns.
For this, is it "faster" to create a thread on the pool or simply to call the method synchronously? I would like to know a rough threshold of work which is more expensive than to create the thread on the pool.
Are there any documentations on this and what about exception catching on the pool and other restcritions with it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用线程池时,您不会“在池上创建线程”,而是使用预先存在的线程或等待线程可用。
只有当许多作业正在等待时,池才会添加另一个线程,然后该线程就会得到很好的利用。
使用任务(Fx4 及更高版本)效果更好。
When using the ThreadPool you do not "create the thread on the pool", you use a pre-existing Thread or wait until one comes available.
Only when many jobs are waiting the Pool will add another Thread, but then that one will be well utilized.
Even better to use Tasks (Fx4 and higher).