C# 是否必须显式关闭客户端?
我见过一个预先存在的代码,它使用自动生成的客户端访问WCF。自动生成页面上建议的原始版本如下所示C# 是否必须显式关闭客户端?,c#,wcf,wcfserviceclient,C#,Wcf,Wcfserviceclient,我见过一个预先存在的代码,它使用自动生成的客户端访问WCF。自动生成页面上建议的原始版本如下所示 public int GetNumber() { ServiceClient client = new ServiceClient(); int number = client.GetNumber(); client.Close(); return number; } 它已被重构为以下内容 public int GetNumber() { ServiceClient clien
public int GetNumber()
{
ServiceClient client = new ServiceClient();
int number = client.GetNumber();
client.Close();
return number;
}
它已被重构为以下内容
public int GetNumber()
{
ServiceClient client = new ServiceClient();
return number.GetNumber();
}
我不确定是否保证客户端将被关闭(可能是由GC或任何其他东西关闭)。我是否建议添加两行代码?您需要调用
Close
方法。或者使用下面的代码片段,在退出时使用块将客户机
对象解压缩
using(ServiceClient client = new ServiceClient())
{
return number.GetNumber();
}
据我所知,您是正确的,.Close()
可以省略。
只要存在不完整的异步任务,就不会通过调用.Close()
或客户端对象超出范围来释放客户端。对于WCF服务使用语句似乎是不明智的,正如下面评论中John的(很棒)链接所示。实际上,这是极少数不使用使用块的地方之一。请参阅。实际上,这是少数几个不使用using
块的地方之一。知道了,很有意思,谢谢约翰。我站在更正,将编辑我的回答嗯。。。谁在下面的回复中加了+1,主张使用Close()并为其应用辩护?根据这些信息,我希望看到这个回复更具说服力,但原则上我避免了投反对票。