C# 取消异步web服务调用

C# 取消异步web服务调用,c#,multithreading,web-services,C#,Multithreading,Web Services,我需要能够取消对我的Web服务的异步调用。我的一个解决方案是使用管理我自己的线程,并使用来自SOAP客户端的同步方法。这很好,需要一些更细粒度的线程管理 如果我使用了添加web服务引用时提供的这两种模式中的任何一种,比如: var Client = new ASL_WS.SvcSoapClient() IAsyncResult result = Client.BeginAuthenticateUser(Email, Password, new AsyncCallback(AuthComplete

我需要能够取消对我的Web服务的异步调用。我的一个解决方案是使用管理我自己的线程,并使用来自SOAP客户端的同步方法。这很好,需要一些更细粒度的线程管理

如果我使用了添加web服务引用时提供的这两种模式中的任何一种,比如:

var Client = new ASL_WS.SvcSoapClient()
IAsyncResult result = Client.BeginAuthenticateUser(Email, Password, new AsyncCallback(AuthCompleted));

这两种模式中有哪一种给了我取消请求的方法?一个用例可能是:用户登录,但希望在身份验证调用完成之前取消

当然,我可以通过修改传递给这些调用的asyncState来实现这一点,并将其设置为禁用UI更新,但这不是我想要的


我可以取消所有未完成的操作吗。Client.Abort()是否取消此类操作。如果有许多异步请求,所有请求都被取消了怎么办?还有其他API方法可以做到这一点吗?

是的,您可以使用中止方法,但请记住以下注意事项。您也可以使用

中止注意:

调用Abort方法时,任何未完成的请求仍将完成,但它们将以错误完成。这意味着,如果您正在使用回调,则仍将为每个未完成的请求调用回调函数。当调用EndInvoke方法时,或者在我们的示例中,调用包装函数EndDelayedResponse时,将生成一个错误,指示底层连接已关闭


CancelAsync示例:

有意义。我花了一段时间才弄明白代码在做什么,但现在已经很明显了。最后我做了类似的事情。谢谢
var Client = new ASL_WS.SvcSoapClient()
Client.AuthenticateUserCompleted += AuthCompleted;
Client.AuthenticateUserAsync(Email, Passsword);