C# 停止从客户端执行WebAPI方法

C# 停止从客户端执行WebAPI方法,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个C#WebAPI,当从客户端调用它时,它运行一个相当复杂的算法。该算法在所需的时间上有点不可预测-通常为5-10秒,但有时可达90秒(我正在研究这个)。当用户在客户端操纵UI时,我希望不断向API发送请求以开始处理,这样当用户进入UI的不同部分时,API请求就完成了,我可以立即显示(最近)API调用的结果 重要的是在最后一次运行时完成计算,因此我希望此API方法的新请求可以替换正在运行的旧请求,而不是在API中生成新线程 如果不清楚: 用户操纵用户界面 UI向WebAPI发送请求(Web

我有一个C#WebAPI,当从客户端调用它时,它运行一个相当复杂的算法。该算法在所需的时间上有点不可预测-通常为5-10秒,但有时可达90秒(我正在研究这个)。当用户在客户端操纵UI时,我希望不断向API发送请求以开始处理,这样当用户进入UI的不同部分时,API请求就完成了,我可以立即显示(最近)API调用的结果

重要的是在最后一次运行时完成计算,因此我希望此API方法的新请求可以替换正在运行的旧请求,而不是在API中生成新线程

如果不清楚:

  • 用户操纵用户界面
  • UI向WebAPI发送请求(WebAPI开始计算)
  • 用户再次操纵UI
  • UI将RequestB发送到WebAPI
  • WebAPI尚未完成RequestA,因此RequestA被终止,RequestB开始

  • 有没有一种方法可以做到这一点,或者如果没有(或者如果这是一种糟糕的做法),有没有一种不同的方法来创建这种功能?

    您是如何进行web api调用的?使用jqueryajax?如果是,请尝试中止以前的ajax请求——据我所知,没有内置的方法中止对请求的处理。您可以在客户端中止请求,但这只意味着客户端停止等待应答。如果可以区分不同的用户,我建议实现某种类型的处理注册表,其中每个用户注册处理任务。如果用户启动了另一个处理任务,请检查他们是否已经启动了一个处理任务,如果已经启动了,请将其中止。然而,首先也是最重要的是,确保这是一个真实的问题,而不是想象中的问题。除非你不能证明这是必要的,否则不要进行优化。我认为这从一开始就是一个糟糕的想法,你应该检查一下你需要/想要这样做的原因。我目前正在处理的项目,如果需要花费2秒以上的时间,那么我们将它放在一个队列中,由一个单独的作业处理程序进程运行,然后使用signar通知客户机作业已完成。工作一开始我们就不会取消。