使用Task.ContinueWith创建执行队列?我有几个操作想在后台执行,但它们必须一个接一个地同步执行。我想知道使用Task.ContinueWith方法来实现这一点是否是个好主意。你预见到这会有什么问题吗?我的代码如下所示:privateobjectsyncRoot=newobject();私人任务最新任务;publicvoidEnqueueAction(System.Actionaction){lock(syncRoot){if(latestTask==null)latestTask=Task.Factory.StartNew(action);elselatestTask=latestTask.ContinueWith(tsk=>action());这应该按设计工作(利用TPL将在相应任务完成后立即安排继续的事实)。在这种情况下,我个人会使用专用线程来使用并发队列(ConcurrentQueue)来绘制任务-这更明确但更容易解析代码,特别是如果您想了解当前有多少任务在排队等等。这有这是我最近发现的一个缺陷,因为我也在使用这种方法来确保任务按顺序执行。在我的应用程序中,我有数千个这些迷你队列的实例,并且很快发现我有内存问题。由于这些队列经常是空闲的,所以我将最后完成的任务对象长期保存,防止垃圾回收。由于最后完成的任务的结果对象通常超过85,000字节,因此它被分配在大对象堆上(垃圾收集期间不执行压缩)。这会导致LOH的碎片化和流程规模的增加。作为避免这种情况的hack,您可以在锁中的实际任务之后安排一个无操作任务。对于真正的解决方案,我需要转向另一种控制调度的方式。我使用了这个片段,它似乎按设计工作。在我的例子中,实例的数量不会以千计,而是个位数。但是,到目前为止没有问题。如果有的话,我会对ConcurrentQueue示例感兴趣吗?谢谢,以上就是C#学习教程:使用Task.ContinueWith创建执行队列?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
