相关疑难解决方法(0)

Parallel.ForEach vs Task.Factory.StartNew

下面的代码片段有什么区别?两个都不会使用线程池线程吗?

例如,如果我想为集合中的每个项目调用一个函数,

Parallel.ForEach<Item>(items, item => DoSomething(item));

vs

foreach(var item in items)
{
  Task.Factory.StartNew(() => DoSomething(item));
}
Run Code Online (Sandbox Code Playgroud)

c# parallel-extensions task-parallel-library c#-4.0

260
推荐指数
4
解决办法
13万
查看次数

等待在这个功能中做什么?

我以为我理解了这个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)

c# asynchronous async-await

2
推荐指数
2
解决办法
3968
查看次数