C# 异步返回REST服务的http状态代码202?

C# 异步返回REST服务的http状态代码202?,c#,rest,asynchronous,C#,Rest,Asynchronous,我们有一个REST服务,它调用一个可能需要2分钟以上处理的系统进程。因为在客户端上,我不想等待30秒到2分钟从服务器返回响应,所以我是否可以向客户端返回202以通知它正在处理,但不一定需要等待进程完成 有没有安全的方法来处理这个问题?(我确信这里存在线程安全问题,特别是如果服务可能一次收到大量请求,那么创建大量线程可能不是解决方案。) 我们正在探索的是使用批处理(大约每5分钟检查一次)来检查数据库中是否有需要生成的报告(这就是系统进程的目的),但我对这种可能性很好奇 提前谢谢 编辑 最终产品实际

我们有一个REST服务,它调用一个可能需要2分钟以上处理的系统进程。因为在客户端上,我不想等待30秒到2分钟从服务器返回响应,所以我是否可以向客户端返回202以通知它正在处理,但不一定需要等待进程完成

有没有安全的方法来处理这个问题?(我确信这里存在线程安全问题,特别是如果服务可能一次收到大量请求,那么创建大量线程可能不是解决方案。)

我们正在探索的是使用批处理(大约每5分钟检查一次)来检查数据库中是否有需要生成的报告(这就是系统进程的目的),但我对这种可能性很好奇

提前谢谢

编辑
最终产品实际上是生成的PDF报告,然后通过电子邮件发送给用户。我主要是想避开等待消费客户端返回服务响应的约2分钟。

只要您使用某种排队机制,您就应该没事了。DB可以工作,或者你可以使用一个更奇特的解决方案,比如一个完整的排队系统。我将返回带有
位置
标题的202,该标题指向某种状态页面,该页面最终包含指向处理结果的链接。

我认为立即从服务返回202是可以的,因为它确认成功接收到创建pdf的请求

您计划在db中记录挂起的请求并成批处理它们,这对我来说很有意义。如果每个pdf文件在发送后都被勾选为“完成”,并且没有错误(如消息队列/工作人员角色系统),我认为它可以正常工作

如果您不想使用db路由,您的服务端点可以生成另一个异步作业,然后返回202。这样,pdf作业会立即启动,客户机会立即得到响应——但在我看来,这确实有点混乱


编辑:重新阅读您的问题-我认为您不能返回202并在同一函数中继续处理。一旦您返回,就到此为止(除非您产生了另一个异步作业,如上所述)。

那么,最终产品(即pdf报告)实际上是通过电子邮件发送给用户的。用户实际上不需要从服务中检查报告是否准备好。我将添加它作为一个编辑。因此,您真正要问的是REST服务是否可以返回一个202,然后继续处理?对,与状态代码202的状态完全相同。我只是试着在没有db改变的情况下处理等待的部分。批处理是我们尚未实现的未来任务,但我们很好奇这种方法是否可行。@JimMischel是的,你是对的。但是我认为直到服务完成执行它的方法,才会对客户机做出响应。我很好奇我们是否可以在方法执行期间返回状态代码。因此,这一问题具有不同步性。