0

我是 C# 的新手,来自 C++,想问一下这是否是使用任务并行库的正确方法。

我有一个 Web 服务,它对长时间运行的操作进行排队。我不想使用异步网络调用,所以我的想法是使用 TPL,在调用网络操作时创建一个任务。我想知道如果我从 Web 操作完成后立即终止的线程安排任务,是否存在任何类型的资源泄漏。假设我不会保留对任务的引用,因为我不需要检查它的状态或结果。谢谢。

编辑: 对不起,在第一次拍摄时没有清楚地表达自己。我的问题与网络服务有关,与客户无关。客户端调用需要很长时间的 Web 服务操作。Web 服务调用返回说操作已在后台成功排队/执行。在Web服务操作中,我想使用TPL,而不是存储StartNew返回的任务对象。想知道,如果我不读取任务对象的状态并因此泄漏,是否会永远保留任务对象。也许只是我的 C++ 思想阻碍了我,我不应该关心泄漏,因为它是托管代码。

4

1 回答 1

0

忘记任务不会导致 TPL 出现任何问题,请参阅 stackoverflow.com/questions/3734280/... 了解更多详细信息。但是,你想在该任务中完成的工作很重要——如果你“忘记它”,你怎么知道它已经完成、正确完成并且不需要重新开始?这都是特定于应用程序的。

线程池的“完全忙碌”意味着已经创建并正在执行 1023 个线程池线程(这可能非常糟糕)。否则,线程池开始时每个 CPU/核心至少有一个线程,只要没有非运行线程的数量,就会通过每秒启动一个新线程来保持该最小值。所以,它真的不会“排队”任何东西。例如,您可以启动 12 个任务,然后它“排队”了 4 个任务,在另一个点它运行了所有 12 个任务......

于 2012-09-19T16:51:52.633 回答