我有示例代码来比较Parallel方法和Task方法的处理时间.这个实验的目标是了解它们是如何工作的.
所以我的问题是:
Task只是ThreadPool.QueueUserWorkItem方法的包装吗?
public Task SomeLongOperation()
{
return Task.Delay(3000);
}
static void Main(string[] args)
{
Program p = new Program();
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(() => p.SomeLongOperation()));
tasks.Add(Task.Factory.StartNew(() => p.SomeLongOperation()));
var arr = tasks.ToArray();
Stopwatch sw = Stopwatch.StartNew();
Task.WaitAll(arr);
Console.WriteLine("Task wait all results: " + sw.Elapsed);
sw.Stop();
sw = Stopwatch.StartNew();
Parallel.Invoke(() => p.SomeLongOperation(), () => p.SomeLongOperation());
Console.WriteLine("Parallel invoke results: " + sw.Elapsed);
sw.Stop();
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)这是我的处理结果:

编辑:
将代码更改为如下所示:
Program p = new Program();
Task[] tasks …Run Code Online (Sandbox Code Playgroud) 我有示例代码.
var charMass = new char[] { 's', 't', 'r' };
string myString = new string(charMass);
string myString2 = new string(charMass);
string myString3 = "str";
string myString4 = "str";
bool bb1 = Object.ReferenceEquals(myString, myString2);
bool bb2 = Object.ReferenceEquals(myString, myString3);
bool bb3 = Object.ReferenceEquals(myString3, myString4);
Run Code Online (Sandbox Code Playgroud)
为什么bb1和bb2是假的?我知道equals必须显示为true,因为它比较了值,但是那些字符串的内存分配呢?为什么myString3和myString4指向堆中的同一块内存但myString和myString2却没有?