如何在Silverlight/WCF中取消异步操作?

Bar*_*lin 4 silverlight wcf asynchronous

我从我的Silverlight应用程序调用异步服务,我希望能够在它成功后取消该调用.服务完成后有一个e.Cancelled选项(例如,如果e.Cancelled Then),但如何在调用后将其取消为true?你如何取消该异步调用?

让我澄清一点......我要做的是两次调用SAME方法,一个接一个地调用,并将最后一次调用的结果调到我的集合中.如果我两次调用异步方法,则无法保证第二次调用将首先返回,因此我可能最终得到第一次调用的结果,并在我的集合中出现错误的结果.所以我想做的是取消第一个电话,当我做第二个电话,所以我没有从第一个电话回来的结果.看到完成的事件args中有一个Canceled标志,我认为你应该能够做到这一点.但是怎么样?

Gon*_*ing 5

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

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

如果您确实需要在服务器上取消正在进行的操作,则需要再次拨打服务器以取消第一次呼叫.假设第一个呼叫是非常慢的,这可能是可能的.

更新(问题已更改)

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

但是...... :)

您已暴露客户端可用性问题.在空闲延迟过去之前,您是否也应该延迟发送任何服务请求.这样快速选择不会导致多次服务调用.

还......:>

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