如果我在silverlight中有这样的功能:
authenticationServiceClient.testCompleted += callback;
authenticationServiceClient.testAsync();
我是否真的需要调用closeasync,或者在程序完成后是否会调用它?
authenticationServiceClient是函数/
的局部变量答案 0 :(得分:2)
程序完成后,所有打开的连接都将关闭。
如果要在程序运行时处置资源,则它取决于客户端使用的绑定。如果您正在处理HTTP绑定,则不一定要调用Close [Async];如果您正在处理TCP绑定,那么Close实际上将关闭套接字,该套接字保持打开状态(一段时间)。
答案 1 :(得分:0)
我总是在Silverlight上遵循这种模式:
// Call
serviceClient.CallMethodCompleted += (s, a) =>
{
// Error?
if (a.Error == null)
{
// Do something
}
else
{
// Handle error
}
// Close
serviceClient.CloseAsync();
};
// Call
serviceClient.CallMethodAsync();
这没有必要,但这样做很好,因为浏览器确实有HTTP保持活动,而且一点管家不会伤害任何人。
答案 2 :(得分:0)
有一些模式(我也遵循这些模式)在方法调用之后立即关闭proxyclient,而不是在回调中。在这种情况下,代码看起来更干净,您不仅可以在回调中使用lambda,还可以使用委托函数。 像这样的东西:
....
serviceClient.CallMethodCompleted += (s, a) =>.....
// Call
serviceClient.CallMethodAsync();
// Close
serviceClient.CloseAsync();