jjzjj

LongRunning

全部标签

c# - 任务并行库 - LongRunning 任务与多个 Continuations

我正在研究TaskParallelLibrary在我正在进行的工作项目中的使用情况,并且想了解长时间运行任务的优点/缺点。我还没有真实的例子,只是想了解这背后的理论。根据MSDN页面关于taskschedulers的说法还有这个SOquestion,似乎最好尽可能避免长时间运行的任务,这样您就不会在ThreadPool之外创建线程。但是假设您确实有一项需要很长时间才能完成的任务,而不是这样:Task.Factory.StartNew(()=>DoTimeConsumingWork(),TaskCreationOptions.LongRunning)您能否尝试将您的工作拆分为更小、更快的

c# - 为什么使用 JpegBitmapDecoder 的 LongRunning 任务 (TPL) 会耗尽资源?

我们有一个托管的.Net/C#应用程序,它创建TPL任务以对JPEG图像执行JPEG元数据编码。每个任务都使用TaskCreationOptions.LongRunning选项构建,例如,Tasktask=newTask(()=>TaskProc(),cancelToken,TaskCreationOptions.LongRunning);TaskProc()利用JpegBitmapDecoder和JpegBitmapEncoder类添加JPEG元数据并将新图像保存到磁盘。我们允许最多2个这样的任务在任何时候处于事件状态,并且这个过程应该无限期地继续下去。执行上述操作一段时间后,我们得

c# - TaskCreationOptions.LongRunning 选项和 ThreadPool

TPL使用任务计划程序来协调任务。根据officialdocument,默认任务调度程序使用线程池,但如果出现TaskCreationOptions.LongRunning选项,那么它将为该任务创建一个专用线程(A)。问题:截至目前,VisualStudio2010的MSDN文档尚未准备好,当前在线MSDN尚未最终确定;有谁知道(A)是对还是错? 最佳答案 是的,LongRunning强制在池外创建一个新线程。这是最新框架版本的一些伪反汇编代码:...if(task.OptionsHasFlagLongRunning)thencre

c# - TaskCreationOptions.LongRunning 选项和 ThreadPool

TPL使用任务计划程序来协调任务。根据officialdocument,默认任务调度程序使用线程池,但如果出现TaskCreationOptions.LongRunning选项,那么它将为该任务创建一个专用线程(A)。问题:截至目前,VisualStudio2010的MSDN文档尚未准备好,当前在线MSDN尚未最终确定;有谁知道(A)是对还是错? 最佳答案 是的,LongRunning强制在池外创建一个新线程。这是最新框架版本的一些伪反汇编代码:...if(task.OptionsHasFlagLongRunning)thencre

c# - 如何专门将 LongRunning 标志传递给 Task.Run()?

我需要一种方法来将异步任务设置为长时间运行而不使用Task.Factory.StartNew(...)而是使用Task.Run(...)或类似的东西。上下文:我有一个连续循环的任务,直到它被外部取消,我想将其设置为“长时间运行”(即给它一个专用线程)。这可以通过以下代码实现:varcts=newCancellationTokenSource();Taskt=Task.Factory.StartNew(async()=>{while(true){cts.Token.ThrowIfCancellationRequested();try{"Running...".Dump();awaitTa

c# - 任务 LongRunning 的副作用?

如果使用LongRunning选项创建任务,是否有任何副作用,因为它们不使用线程池 最佳答案 LongRunning选项是对调度程序的提示,这意味着它可能选择在非ThreadPool线程上执行Task(如果它是线程池支持的DefaultScheduler它很可能会)。LongRunning选项的一个副作用是该任务不允许任务内联。这意味着如果LongRunning任务创建了其他嵌套任务或子任务并在这些任务中的任何一个上调用了Wait,它们将始终在不同的线程上执行,而不是被内联(即在执行Wait的同一线程上运行。在其他人的回答中值得注意

c# - 最佳实践 LongRunning 任务创建

对于需要使用.Net4中的任务API运行的后台线程来说,这是一个好的设计吗?我唯一关心的是如果我们想取消那个任务我会怎么做?我知道我可以将ProgramEnding设置为true但我知道任务API中有一个CancellationToken。这只是一个代码示例,一个线程将添加到集合中,另一个线程将从集合中删除。任务设置为LongRunning,因为它需要在程序运行时连续运行privatevoidRemoveFromBlockingCollection(){while(!ProgramEnding){foreach(varxinDataInQueue.GetConsumingEnumera

c# - 何时使用 TaskCreationOptions.LongRunning?

我想知道这个问题已经有一段时间了,但从未真正找到答案。我知道这是对任务调度程序的提示,任务将在其中运行,并且任务调度程序可以(或现在将?)决定为该任务实例化一个非线程池线程。我不知道(令人惊讶的是在Internet上找不到任何地方)是一些“经验法则”何时将任务指定为长时间运行。一秒钟长吗?30秒?一分钟?5分钟?它与应用程序使用的任务量有关系吗?作为程序员,我是否应该对线程池中的#threads进行一些计算,我创建了多少个任务,同时有多少个将长时间运行,并基于此决定是否使用长时间运行的任务?希望能在这里有所收获。 最佳答案 可以量化