我是C#的新手,来自C ++,想问一下这是否是使用任务并行库的正确方法。
我有一个Web服务,它将长时间运行的操作排队。我不想使用异步Web调用,所以我的想法是使用TPL,在调用Web操作时创建一个任务。我想知道是否有任何类型的资源泄漏,如果我从Web操作完成后立即死亡的线程安排任务。让我们说我不会保留对任务的引用,因为我不需要检查它的状态或结果。感谢。
修改 Sry,第一枪没有表达清楚。我的问题与Web服务有关,而不是与客户有关。客户端调用需要很长时间的Web服务操作。 Web服务调用返回表示操作已在后台成功排队/执行。在Web服务操作中,我想使用TPL而不是存储StartNew返回的任务对象。想知道,如果我没有读取其状态并因此泄漏,那么任务对象是否永远保留。也许只是我的C ++思维方式正在阻碍我,因为它是托管代码,所以我不应该关注泄漏。
答案 0 :(得分:0)
忘记任务不会导致TPL出现任何问题,请参阅stackoverflow.com/questions/3734280 / ...以获取更多详细信息。但是,你想在这项任务中完成的工作很重要 - 如果你“忘掉它”,你怎么知道它已经完成,正确完成,不需要重新启动?这都是特定于应用程序的。
线程池的“完全忙”意味着已经创建并正在执行1023个线程池线程(这可能非常糟糕)。否则,线程池最初以每个CPU / Core一个线程开始,并且只要没有那个数量的非运行线程,就通过每秒启动一个新线程来维持最小值。所以,它确实没有“排队”任何东西。例如你可以开始12个任务,然后它“排队”4,在另一个点它运行所有12 ...