1

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

选择是:

  1. BackgroundWorker(线程池)

  2. 线

以上两个建议用于长时间运行的任务(整个应用程序生命周期)。还有其他选择吗?此外,

  • BackgroundWorker - 使用 ThreadPool 线程和 UI 更新的长时间运行进程。

  • 线程- 用户定义的线程(线程创建开销等)和长时间运行的进程(可以使用优先级)

    哪个是最好的选择

    1. 如果不需要 UI 更新、优先级和线程(仅在应用程序/进程启动时创建)?

    2. 如果任务数量增加?(线程池饥饿的护理)

还有什么有趣的事情吗?

4

2 回答 2

1

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

您可能会使用带有 LongRunning 选项的任务 (TPL)。TPL 也在 ThreadPool 之上运行,但该选项可以使其保留一个线程。

如果任务数量增加?(线程池饥饿的护理)

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

于 2012-11-07T07:39:10.057 回答
1

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

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

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

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

于 2012-11-07T07:45:54.430 回答