c# - C# 使用哪种模式来为长时间运行的任务提供同步和发布/订阅方案
问题描述
假设我有一个图像处理库,我需要它以两种方式工作 - 同步和作为 pub/sub 模式。所以第一种方法ProcessBigListOfImages
在完成之前不会返回。第二种方法ProcessBigListOfImagesStart
应该立即返回某种订阅信息(最好有进度反馈),所以它会在某个地方被该过程调用。
现在,这就是我在使用本地文件系统和 Azure 计算和存储时所需要的。两个不同的平台,但任务相似。我想拥有相同的 API。这是可行的吗?
我可能需要再次阅读一些关于设计模式的书籍来刷新我的记忆......
解决方案
对于您想要立即返回的长时间运行的任务,您将不得不使用队列(Azure 服务总线 / RabbitMQ 等)。只需将带有任务 ID 的消息放入队列中,然后返回可用于跟踪的任务 ID。
另一方面,您的工作进程将从队列中获取任务并根据任务 ID 将其标记为完成。您可以使用 db/cache 服务来保存和跟踪您的任务 ID。您的工作进程实际上取决于您的偏好,它可以是 Web 作业、Web 服务器或无服务器。
推荐阅读
- sockets - 如何在 pyOpenSSL 中使用 CRL?
- php - Open PDF in new tab using PHP
- r - ggplot2中雷达图中未表示的线和区域
- java - Gradle 同步失败:所有 Firebase 库必须高于或低于 14.0.0
- c# - C# Windows Form KeyCombination Detect 失败,没有任何反馈
- django - 单输入django表单
- ios - iOS Voiceover 从覆盖的 UIWindow 中读取
- android - 使用android dataBinding时出错
- julia - 如何在 Julia 中编写分段微分方程?
- reactjs - 使用第三方控件在 Jest/Enzyme/ReactTS 中难以模拟单元测试事件