gpt4 book ai didi

c# - HttpClient 静态与新

转载 作者:行者123 更新时间:2023-12-04 16:27:45 26 4
gpt4 key购买 nike

我已经阅读了很多关于此的内容,但仍然感到困惑。下面是我如何使用 HttpClient 以便它可以重用:

private static HttpClient client;

public ClientClass()
{
client = new HttpClient();
}

我不明白的是,即使它是静态的,我仍然在每个 Controller 调用上创建一个新实例。只有当我在同一个方法中进行多个 HttpClient 调用时,它才会被重用,但除此之外,它总是会为每个 Web 请求创建一个新实例。

是否应该通过多个 Web 请求重用一个 HttpClient 实例,如果是这样,我该怎么做,因为我这样做的方式会在每次 api 调用时创建一个新实例?

另外,如果我这样做有区别吗:
private static HttpClient client = new HttpClient();

public ClientClass() {}

最佳答案

我不完全确定您在阅读何处指向您当前的实现,特别是因为您说多个来源给了您这个想法。

我的假设是您误读了这些来源,认为它们向您展示了一个正常的构造器,而不是静态的构造器?

正如 Jawad 指出的那样,您每次都在创建一个新实例,这完全违背了拥有静态变量的目的。

正如 MSDN 上所述。 https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.8

class ClientClass 
{
private static readonly HttpClient client;
static ClientClass()
{
client = new HttpClient();
}
}

这里的关键是您使用的是静态构造函数。因此,该对象只创建一次,而不是像您怀疑的那样每次创建该类的实例时。

如果你想阅读更多关于静态构造函数的内容,你可以在这里阅读: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors

关于c# - HttpClient 静态与新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59664288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com