首页 > 解决方案 > C# 使用哪种模式来为长时间运行的任务提供同步和发布/订阅方案

问题描述

假设我有一个图像处理库,我需要它以两种方式工作 - 同步和作为 pub/sub 模式。所以第一种方法ProcessBigListOfImages在完成之前不会返回。第二种方法ProcessBigListOfImagesStart应该立即返回某种订阅信息(最好有进度反馈),所以它会在某个地方被该过程调用。

现在,这就是我在使用本地文件系统和 Azure 计算和存储时所需要的。两个不同的平台,但任务相似。我想拥有相同的 API。这是可行的吗?

我可能需要再次阅读一些关于设计模式的书籍来刷新我的记忆......

标签: c#azuredesign-patternsarchitecture

解决方案


对于您想要立即返回的长时间运行的任务,您将不得不使用队列(Azure 服务总线 / RabbitMQ 等)。只需将带有任务 ID 的消息放入队列中,然后返回可用于跟踪的任务 ID。

另一方面,您的工作进程将从队列中获取任务并根据任务 ID 将其标记为完成。您可以使用 db/cache 服务来保存和跟踪您的任务 ID。您的工作进程实际上取决于您的偏好,它可以是 Web 作业、Web 服务器或无服务器。


推荐阅读