使用以下操作的 KEY 实施任务的最佳方法是什么:-
选项 1) 只有一个密钥是未决的。例如,可用于从 ASP.NET MVC 为缩略图图像排队单个渲染,无论图像 Url 被点击多少次。只有一个运行,所有其他请求等待那个完成。
选项 2) 具有相同键的所有项目必须按顺序执行。例如,可用于确保从后备存储获取文件到本地缓存的操作不会同时尝试将文件获取到缓存。选项 1 是一种特殊情况,其中具有相同键的后续操作被简单地丢弃(通常只保存文件存在检查)。
我有一个现有的 WorkQueue 可以处理这两种情况(以及 Apartment 状态、ThreadPriority 设置和最大并行度)。TPL 似乎是替代它的最佳解决方案,并将带来改进的取消选项。
带有延续的嵌套任务看起来很有希望,但维护当前排队任务的字典很快就会在 TaskFactory 和 TaskScheduler 类之间变得混乱。从 Task 继承也是有问题的,因为 TaskFactory 和 TaskScheduler 在 Task 上都不是通用的。
大多数任务并行示例假设任务集是提前知道的。在这种情况下,新任务一直被添加,需要根据请求的操作和传入的密钥被丢弃或链接到现有任务上。
有没有人使用 TPL 实现过类似的东西,如果有,你在 Task、TaskScheduler 和 TaskFactory 类中采用了什么方法?