我有一个类,其中有一个方法可以像下面这样返回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。这是什么问题?
答案 0 :(得分:1)
为什么您希望它为空?处置对象不会将对它的引用设置为null,它只是调用Dispose()
,将实例呈现为无法使用的状态(如果正确实现)。
另请参阅Setting an object to null vs Dispose()。
另外,不要处理您的HttpClient,请阅读You're using HttpClient wrong and it is destabilizing your software。