如果我有一个循环,我在其中创建CommunicationObject(确切地说ClientBase),是否需要在使用后调用Close()函数?
jquery
CommunicationObject是否使用CLR收集后仍然存在的任何系统资源?如果是这样,如果我不关闭它将会发生什么?是否有可能放弃服务?
答案 0 :(得分:0)
是的,你需要关闭它。实际上Service是一次性的,因此请使用using语句:
using(var client = new Service()){
...
} // <-- this line will trigger the Close();
虽然有一点问题。如果客户端状态出现故障,Close方法可能会抛出异常。正确的做法是这样的:
try
{
...
client.Close();
}
catch (CommunicationException e)
{
...
client.Abort();
}
catch (TimeoutException e)
{
...
client.Abort();
}
catch (Exception e)
{
...
client.Abort();
throw;
}
正如此处所示:https://msdn.microsoft.com/en-us/library/aa355056%28v=vs.110%29.aspx
我个人认为这有点过分。我总是只使用using语句。 (第一个代码示例)