silverlight - 如何取消 Silverlight/WCF 中的异步操作?

标签 silverlight wcf asynchronous

我正在从我的 Silverlight 应用程序调用异步服务,并且我希望能够在调用后取消该调用。服务完成后有一个 e.Cancelled 选项(即 If e.Cancelled Then),但是在调用它之后如何将其设置为 true?你如何取消那个异步调用?

让我澄清一下......我想做的是两次调用 SAME 方法,一个接一个,然后将最后一次调用的结果放入我的集合中。如果我两次调用异步方法,则不能保证第二次调用将首先返回,因此我可能会得到第一次调用的结果最后出现并且在我的集合中得到错误的结果。所以我想做的是在我调用第二个电话时取消第一个电话,这样我就不会从第一个电话中得到结果。看到已完成的事件参数中如何有一个 Canceled 标志,我认为您应该能够做到这一点。但是怎么做?

最佳答案

它是异步的......传输被传递到远程服务器,并且在服务器完成之前它不会返回。

基本上服务器会继续运行,但您不必等待响应。断开您的服务完成事件处理程序并假装它从未被调用过。这将产生取消操作的效果。

如果您确实需要取消服务器上正在进行的某些操作,则需要再次调用服务器以取消第一次调用。假设第一次调用非常慢,这可能是可能的。

更新(随着问题的改变)

在您指定的情况下,如果第二个操作通过,则由服务器取消正在进行的操作,而不是由客户端决定。 e.Cancelled 设置在服务器端。

然而... :)

您已经暴露了客户端可用性问题。您不应该延迟发送任何服务请求,直到空闲延迟过去。这样,快速选择不会导致多次服务调用。

还有... :>

您可能还想向您的服务调用发送一个序列号并将其作为结果的一部分返回。然后你就会知道它是否是最新的请求。

关于silverlight - 如何取消 Silverlight/WCF 中的异步操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585824/

相关文章:

javascript - ASP.NET C# 和处理长进程

c# - 如何在 C# 中将类型 'system.windows.media.imagesource' 转换为 'system.drawing.image' 或 byte[]?

javascript - 当它也具有 runat ="server"时,如何使用 JavaScript 更改 html <param> 值属性

wpf - 如何使 ItemsControl 根据运行时类型选择不同的模板

silverlight - 在自定义控件中使依赖属性绑定(bind)两种方式

c# - 将 DataContract 作为 XML 保存在数据库中

WCF 服务引用支持文件未更新

c# - WCF 错误 "there was no endpoint listening at ..."

.net - 记录器实现中的 CloudQueue.BeginAddMessage

jQuery.ready() 函数和异步 CSS