使用HttpClient的時候一般都說要用單例模式。就想到是否執行緒安全。多個執行緒拿到相同的實體,對同一個實體操作,不會互相影響嗎?
就做了簡單的一個測驗,
static readonly HttpClient client = new HttpClient();
static void Main(string[] args)
{
A();
Thread.Sleep(1000);
B();
Console.ReadLine();
}
public static void A()
{
new Thread(() =>
{
client.DefaultRequestHeaders.Add("a", "a");
Console.WriteLine("A() set a");
Thread.Sleep(10000);
Console.WriteLine("A() sleep stop");
}).Start();
}
public static void B()
{
Console.WriteLine("B() start");
if (client.DefaultRequestHeaders.Contains("a"))
Console.WriteLine("has a");
Console.WriteLine("B() end");
}
執行結果
A() set a
B() start
has a
B() end
A() sleep stop
執行結果顯示執行緒不安全。
java中有MultiThreadedHttpConnectionManager保證執行緒安全,C#中怎么處理呢?還是我哪里理解有問題?
uj5u.com熱心網友回復:
既然要修改header, 那就是另一個實體(也可以是另一個單例?)轉載請註明出處,本文鏈接:https://www.uj5u.com/net/269634.html
標籤:C#
