代码之家  ›  专栏  ›  技术社区  ›  wasker

取消异步远程处理调用

  •  2
  • wasker  · 技术社区  · 17 年前

    我有一个客户机-服务器体系结构,其中客户机使用.NET远程处理与服务器通信。服务器处理所有业务逻辑和数据库交互。我需要添加一个可能需要一段时间才能执行的操作,它返回的数据集可能非常大。我正在考虑使用异步调用。现在问题出现了:假设客户机进行了这个异步调用,操作启动了sql查询,用户要么关闭客户机,要么单击cancel——这个操作会发生什么情况?是否有任何方法取消挂起的异步调用,该调用正忙于与SQL Server对话?

    谢谢。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Corey Trager    17 年前

    您可以设计您的客户机/服务器交互,以便服务器允许一个工作线程执行sql操作,以便它可以从客户机接收另一个调用。所以,客户机发出call 1并说do sql工作。服务器将该工作提供给工作线程,并准备好新的输入。然后客户打电话给2,说“没关系”。服务器会做一些记帐,以确保在工作线程完成时不会回拨到客户端。

    服务器能否安全地中断工作线程。我不确定。这是否会对sql server的工作产生影响。不确定。

        2
  •  0
  •   Alexander Abramov    17 年前

    当客户端关闭应用程序时,现在如何处理正在进行的调用?你可以用异步调用做同样的事情。

    是的,异步是处理长时间运行的请求的方法。如果结果集足够大,您甚至可以考虑从服务器发送多个响应的结果集块。

    当用户单击“取消”时,您将向服务器发送新消息,说明您对结果不再感兴趣。如果sql请求正在线程池上运行,则不能真正取消它。