创建许多任务和延续并在不启动的情况下存储它们是不好的做法吗?

问题描述 投票:0回答:1

我有一些使用消息的使用者。根据该消息,我必须为每条消息执行3种类型的异步操作(.net Task - TPL)。对于执行这些任务之前的每条消息,我必须执行另一个任务,例如StartingDownloadMapFinishedDoenloadMap。但是,有这样的约束:

1)只能同时执行10个任务(相同类型)。

2)对于任何一个任务,如果输入参数相同,我们可以使用已执行或已注册的任务。例如:

- Message1 -> England
- Message2 -> Italy
- Message3 -> Brazil

比方说,这3个任务之一称为DownloadEuropeMapPng。假设这个过程将花费30秒。在这种情况下,如果我正在为DownloadEuropeMapPng消息执行England,并且2秒钟后收到一条新消息(例如:意大利),则必须在已经执行下载任务的情况下附加新消息过程。

为了满足这些要求,我创建了这样的字典:Dictionary。我正在使用.ContinueWith并注册要执行的新任务。而且我有if块来检查我是否正在运行10个任务以进行指定类型的操作。 (第一个约束)这些任务执行完毕后,我将从字典中将其删除。

使用如此繁重的任务不好吗?可能有问题吗?因此,如果我可以同时说1000条消息。我可能会创建3000个任务,但其中只有30个将同时运行。否则我将有一堆注册的继续回调,这些回调将在一段时间后执行。

c# .net multithreading task-parallel-library
1个回答
0
投票

除了消耗更多的内存外,我认为拥有许多任务对象没有什么错。如果需要限制并发性,则可以通过创建自定义任务计划程序(例如示例here),以更简单的方式来实现。

或者,您也可以看到Parallel.ForEach并指定MaxDegreeOfParallelism

© www.soinside.com 2019 - 2024. All rights reserved.