Parallel
所在的命名空间是 System.Threading.Tasks
,与线程,任务有关
Paraller.For()
方法类似于 C#
的 for
循环语句,也是多次执行一个任务
可以并行运行迭代,迭代的顺序没有定义。
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
ParallelLoopResult result = Parallel.For(0, 10, i =>
{
Console.WriteLine("迭代次数:{0},任务ID:{1}", i, Task.CurrentId);
});
Console.WriteLine("是否完成:{0}", result.IsCompleted);
}
}
浏览器在线运行为单一线程,而通过 Visual Studio
创建的测试项目运行就是多个线程迭代顺序不同
Paraller.ForEach()
方法遍历实现了 IEnumerable
的集合,其方法类似于 foreach
,但以异步方式遍历,这里也没有确定遍历顺序
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
string[] data = { "str1", "str2", "str3" };
ParallelLoopResult result = Parallel.ForEach<string>(data, str =>
{
Console.WriteLine(str);
});
Console.WriteLine("是否完成:{0}", result.IsCompleted);
}
}
Parallel.Invoke()
方法,它提供了任务并行性模式。允许传递一个 Action
委托数组,在其中可以指定应运行的方法
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Parallel.Invoke(() =>
{
Thread.Sleep(100);
Console.WriteLine("method1");
}, () =>
{
Thread.Sleep(10);
Console.WriteLine("method2");
});
}
}
前面用 ASP.NET Core 写了单页面应用,要生成静态 HTML
页面,通过反射获取 Action 列表,再发起 HTTP
请求得到页面源码,为了提高生成速度,采用并行请求
项目地址:https://github.com/netnr/np
最常见用于并发请求接口