.Net Task与线程
作者:Aliot
发布时间:2020-08-03 03:43:00
评论:0
阅读:26
Task是基于线程池调度的,不过微软说不要把Task理解为线程之上的抽象,要把它理解为异步工作的抽象
List<int> tid = new List<int>();
for (int i = 0; i < 100; i++)
{
ThreadPool.QueueUserWorkItem((state) =>
{
int id = Thread.CurrentThread.ManagedThreadId;
if (tid.Contains(id))
{
Console.WriteLine($"{id} reuse " + tid.Count());
}
else
{
tid.Add(id);
Console.WriteLine($"{id} new " + tid.Count());
}
});
Thread t = new Thread(() =>
{
int id = Thread.CurrentThread.ManagedThreadId;
if (tid.Contains(id))
{
Console.WriteLine($"{id} reuse " + tid.Count());
}
else
{
tid.Add(id);
Console.WriteLine($"{id} new " + tid.Count());
}
});
t.Start();
Task<int> t = new Task<int>(() =>
{
int id = Thread.CurrentThread.ManagedThreadId;
if (tid.Contains(id))
{
Console.WriteLine($"{id} reuse " + tid.Count());
}
else
{
tid.Add(id);
Console.WriteLine($"{id} new " + tid.Count());
}
return 10;
});
t.Start();
Task<int>.Factory.StartNew(() =>
{
int id = Thread.CurrentThread.ManagedThreadId;
if (tid.Contains(id))
{
Console.WriteLine($"{id} reuse " + tid.Count());
}
else
{
tid.Add(id);
Console.WriteLine($"{id} new " + tid.Count());
}
//Thread.Sleep(0);
return 10;
});
}