1.法1
private async Task DoListOfTasks(List<string> items)
{
List<Task> tasks = new List<Task>();
foreach (var item in items)
{
var task = Task.Run(async () =>
{
try
{
await DoTaskOnItem(item);
}
catch
{
AddErrorMessage($"Error: {item}");
}
});
tasks.Add(task);
}
await Task.WhenAll(tasks);
}
2.法2
{
ThreadPool.SetMaxThreads(13, 13);
//线程池是单例的,全局唯一的
//设置后,同时并发的Task只有8个;而且线程是复用的;
//Task的线程是源于线程池
List<int> countlist = new List<int>();
List<Task> tasklist = new List<Task>();
for (int i = 0; i < 100; i++)
{
int k = i;
tasklist.Add(Task.Run(() =>
{
Console.WriteLine($"This is {k} running ThreadId={Thread.CurrentThread.ManagedThreadId.ToString("00")}");
Thread.Sleep(2000);
countlist.Add(Thread.CurrentThread.ManagedThreadId);
}));
}
Task.WaitAll(tasklist.ToArray());
Console.WriteLine(countlist.Distinct().Count());
}