Parallel.Invoke能并發運作多個方法。
簽名如下:
public static void Invoke(
params Action[] actions
)
是一個靜态方法,無需執行個體化。參數是一個Action委托數組,可以填寫任意多個方法,然後等他們運作完畢。方法無序執行。有4個邏輯核心也不是保證4個方法同時進行。
class Program
{
static void Main(string[] args)
{
var sw = Stopwatch.StartNew();
//sequential
Console.WriteLine("sequential");
Sum1();
Sum2();
Console.WriteLine(sw.Elapsed.ToString());
//parallel
sw = Stopwatch.StartNew();
Console.WriteLine("parallel");
Parallel.Invoke(Sum1, Sum2);
}
static void Sum1()
long sum = 0;
for (int i = 0; i < 10000000; i++)
{
sum += i;
}
Console.WriteLine(sum.ToString());
}
static void Sum2()
sum -= i;
}
sequential
49999995000000
-49999995000000
00:00:00.0861083
parallel
00:00:00.0458769
Press any key to continue . . .
從上斷程式看出,并行運作節省了約一半的CPU時間
但是當兩個函數都耗時不多的情況下,并行運作反而慢了。看下面的代碼
static void Main(string[] args)
{
var sw = Stopwatch.StartNew();
//sequential
Console.WriteLine("sequential");
Sum1();
Sum2();
Console.WriteLine(sw.Elapsed.ToString());
//parallel
sw = Stopwatch.StartNew();
Console.WriteLine("parallel");
Parallel.Invoke(Sum1, Sum2);
}
static void Sum1()
long sum = 0;
for (int i = 0; i < 100; i++)
sum += i;
Console.WriteLine(sum.ToString());
static void Sum2()
sum -= i;
4950
-4950
00:00:00.0013660
00:00:00.0015971