下面的代码片段有什么区别?两个都不会使用线程池线程吗?
例如,如果我想为集合中的每个项目调用一个函数,
Parallel.ForEach<Item>(items, item => DoSomething(item));
vs
foreach(var item in items)
{
Task.Factory.StartNew(() => DoSomething(item));
}
Run Code Online (Sandbox Code Playgroud) 我以为我理解了这个async-await模式,C#但今天我发现我真的没有.
在这样一个简单的代码片段中.我已经System.Net.ServicePointManager.DefaultConnectionLimit = 1000;定义了.
public static async Task Test()
{
HttpClient client = new HttpClient();
string str;
for (int i = 1000; i <= 1100; i++)
str = await client.GetStringAsync($"https://en.wikipedia.org/wiki/{i1}");
}
Run Code Online (Sandbox Code Playgroud)
是什么await在这里做?最初我认为因为这是在async-await模式中,这意味着基本上HttpClient将以多线程方式启动所有HTTP GET调用,即基本上应该立即获取所有Url.
但是,当我使用Fiddler来分析我发现的行为时,它确实按顺序获取了URL.
我需要将其更改为此以使其工作:
public static async Task<int> Test()
{
int ret = 0;
HttpClient client = new HttpClient();
List<Task> taskList = new List<Task>();
for (int i = 1000; i <= 1100; i++)
{
var i1 = i;
var task = …Run Code Online (Sandbox Code Playgroud)