在尝试将工作代码从 .Net Framework 4.6.1 传递到 .Net Core 3.1 时,我偶然发现了一个意外行为
这是代码的简化:
static void Main(string[] args)
{
for (int i = 0; i < 20; i++)
{
ThreadPool.QueueUserWorkItem(o =>
{
Console.Write($"In, ");
RestClient restClient = new RestClient($"http://google.com");
RestRequest restRequest = new RestRequest();
var response = restClient.Get(restRequest);
Console.Write($"Out, ");
});
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
作为多线程工作的结果,控制台上的预期输出是“In”列表,然后是混合的“In”和“Out”,最后是一些“Out”。这在 .Net Framework 上按预期工作。像这样的东西:
In, In, In, In, In, In, In, In, In, In, In, In, In, In, In, Out, In, Out,
In, Out, In, Out, In, Out, In, Out, …Run Code Online (Sandbox Code Playgroud)