C#对于长时间运行的任务,使用哪种模式进行同步和发布/订阅场景

C#对于长时间运行的任务,使用哪种模式进行同步和发布/订阅场景,c#,azure,design-patterns,architecture,C#,Azure,Design Patterns,Architecture,假设我有一个图像处理库,我需要它以两种方式工作——同步和作为发布/订阅模式。因此,第一个方法ProcessBigListOfImages在完成之前不会返回。第二个方法ProcessBigListOfImagesStart应该会立即返回一些订阅信息(最好是进度反馈),因此该过程会在以后的某个地方调用它 现在,这就是我在使用本地文件系统和Azure计算和存储时所需要的。两个不同的平台,但任务相似。我想要相同的API。这可行吗 我可能需要再读一些关于设计模式的书来刷新我的记忆…对于长时间运行的任务,如

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

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


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

对于长时间运行的任务,如果您想立即返回,则必须使用队列(Azure服务总线/RabbitMQ等)。只需将消息放入带有任务Id的队列中,并返回可用于跟踪的任务Id


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

对于要立即返回的长时间运行任务,必须使用队列(Azure服务总线/RabbitMQ等)。只需将消息放入带有任务Id的队列中,并返回可用于跟踪的任务Id


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

我知道如何从设计的角度来做。我现在知道了如何在C#中使它变得漂亮和可用。所以我的问题更多的是关于C#模式。我知道如何从设计的角度来做。我现在知道了如何在C#中使它变得漂亮和可用。所以我的问题更多的是关于C#模式。