由于您很可能已经弄明白,我对异步操作一般不熟悉(仅使用Android的AsyncTask)。
这是WCF REST POST方法的概要;我将使用此图片来解释我想要实现的目标。
FirstJob将一些东西保存到数据库中。
SecondJob读取数据库中保存的内容,并对数据进行一些处理。
客户端并不关心SecondJob中发生的事情,只是想收到FirstJob的响应。
所以这两个工作并不需要并行运行,因为SecondJob依赖于FirstJob;理想情况下,SecondJob将在单独的线程/上下文(?)或类似的内容中运行。
从我注意到的,第二个作业确实在一个单独的线程中启动,执行在第二个作业运行时到达return语句,但请求在SecondJob完成之前不会结束。
答案 0 :(得分:3)
我个人将第二个作业视为单独的POST操作,并从控制器调用第二个作业POST。控制器是第一个作业的控制器,可以从第一个作业返回正确的状态;它恰好在执行时将POST调用到第二个端点。
这种方法的好处是,第二个作业甚至不需要在同一个IIS上(在NLB服务器场中它可以在任何地方),因此您可以免费获得负载平衡。或者,第二个作业服务器"可以在为这种后台处理任务保留的特定URL上。
答案 1 :(得分:1)
我建议您不要依赖IIS来处理后台任务,因为它可以在不等待的情况下关闭它。我建议你创建一个Windows服务应用程序,它将接受第二个作业的请求,通过另一个WCF绑定或数据库请求或其他东西。
您可以通过控制器的另一个请求获得第二个作业的结果,如@PhillipH所述。
答案 2 :(得分:0)
我试图做的事情实际上是在第一时间工作,但视觉工作室调试器欺骗了我。我在没有调试器的情况下再次测试,但是使用Tread.Sleep(60000)并且它看起来像预期的那样。 api调用返回响应后,SecondJob继续在后台运行。