Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否必须显式关闭客户端?_C#_Wcf_Wcfserviceclient - Fatal编程技术网

C# 是否必须显式关闭客户端?

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

我见过一个预先存在的代码,它使用自动生成的客户端访问WCF。自动生成页面上建议的原始版本如下所示

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()并为其应用辩护?根据这些信息,我希望看到这个回复更具说服力,但原则上我避免了投反对票。