首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景工作者与线程

背景工作者与线程
EN

Stack Overflow用户
提问于 2012-11-07 07:30:34
回答 2查看 2.1K关注 0票数 1

对于C# 4.0 windows应用程序中的长运行任务(异步任务)。

这些选择是:

  1. BackgroundWorker (线程池)
  2. 线程

对于长期运行的任务(在整个应用程序生存期内),建议使用上述两种方法。还有其他选择吗?另外,

  • BackgroundWorker -使用ThreadPool线程,并使用UI更新的长时间运行过程。
  • 线程-用户定义的线程(线程创建开销等)对于长时间运行的过程(可以使用优先级) 这将是最好的选择

代码语言:javascript
复制
1. if no need for UI update,priority and for Thread (which is created only on application/process start)?
2. if number of tasks increased? (Care of ThreadPool Starvation)

还有其他有趣的事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-07 07:39:10

对于C# 4.0 windows应用程序中的长运行任务(异步任务)。

您可能会在LongRunning选项中使用一个任务(TPL)。TPL也运行在ThreadPool之上,但是这个选项可以使它保留一个线程。

如果任务数量增加?(照顾ThreadPool饥饿)

ThreadPool将尝试动态地适应,您可以选择帮助它。

票数 1
EN

Stack Overflow用户

发布于 2012-11-07 07:45:54

BackgroundWorker也使用线程,但只是抽象了一些线程创建和监视细节。

因此,通过使用BackgroundWorker,您可以避免;-必须处理细节-创建新线程的高成本(+性能)

只有当您需要在其他异步任务结束之前运行另一个异步任务时,ThreadPool饥饿才会发生。您在这里所能做的不多,因为CPU已经满负荷运行。

我不会直接用Thread的。如果您对所提供的ThreadPool不满意,也许您可以尝试自己实现一个(最好不要这样做,只是开玩笑)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13265053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档