我有一个类,其中有一个返回http客户端的方法,如下所示。
private HttpClient client;
private HttpClient GetClient()
{
if (this.client == null)
{
this.client = new HttpClient
{
BaseAddress = new Uri("api")
};
this.client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
return this.client;
}
我在其他方法中使用这个GetClient方法,比如
using (var client = this.GetClient())
{
var response = await client.GetAsync($"/abc").ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
}
这个客户端在using块之外没有得到null。下一次当这个方法命中时,客户端就不是null。问题是什么?
为什么希望它为null?处理对象不会将对它的引用设置为null,它只是调用Dispose()
,使实例处于不可用状态(如果实现得当(。
另请参阅将对象设置为null vs Dispose((。
另外,不要处理您的HttpClient,请阅读您使用HttpClient错误,这会破坏您的软件的稳定。