for(...) {Task.run;} 同 Parallel.For 效果相同。
Task 是对 Thread 执行的代码的抽象,它不是 Thread,也不同 Thread 相关。TaskScheduler 负责将 Task 分配到某个 Thread 去执行。
你可以从 ATL 中的 CTheadPool 的实现上来理解这个问题:http://msdn.microsoft.com/zh-cn/library/9tz6fz1e.aspx
for(...) {Task.run;} 同 Parallel.For 效果相同。 -------------效果不同吧
@魂之挽歌--ZXC: 为啥不同?
@Launcher:
for (int i = 0; i < 50; i++)
{
Thread.Sleep(20);
Task.Run(() => { Console.WriteLine(i); });
}
Console.WriteLine("---------------------------------------");
Console.ReadKey();
Parallel.For(0, 50, (i) =>
{
Thread.Sleep(20);
Console.WriteLine(i);
});
Console.ReadKey();
@魂之挽歌--ZXC:
for (int i = 0; i < 50; i++)
{
Task.Run(() => { Thread.Sleep(20);Console.WriteLine(i); });
}
var tpWorkFunc = ()=>{Thread.Sleep(20);Console.WriteLine(i);};
for(....) Task.Run(tpWorkFunc);
Parallel.For(... tpWorkFunc);
@Launcher: 那么请问 task.run的应用场景
@魂之挽歌--ZXC: 不知道,没用过。
@魂之挽歌--ZXC: 鉴于你态度很好,我再告诉你下
for(....) Task.Run(tpWorkFunc);
Parallel.For(... tpWorkFunc);
的不同之处。
Parallel.For 会使用负载均衡算法,而且这个算法可以自己定义。也就是说会按照逻辑处理个数和当前资源来分配使用几个 Task 来执行。