【发布时间】:2014-01-23 23:06:50
【问题描述】:
所以我只是在 c# 中对 Task 类进行了一些实验,然后发生了以下事情。
这是我调用的方法
static async Task<List<int>> GenerateList(long size, int numOfTasks)
{
var nums = new List<int>();
Task[] tasks = new Task[numOfTasks];
for (int i = 0; i < numOfTasks; i++)
{
tasks[i] = Task.Run(() => nums.Add(Rand.Nex())); // Rand is a ThreadLocal<Random>
}
for (long i = 0; i < size; i += numOfTasks)
{
await Task.WhenAll(tasks);
}
return nums;
}
我这样称呼这个方法
var nums = GenerateList(100000000, 10).Result;
在我使用任务生成之前大约需要 4-5 秒。在我像这样实现这个方法之后,如果我通过了 10-20 个任务,生成时间会降低到 1,8-2,2 秒,但是该方法返回的 List 具有 numOfTask 编号其中的元素,因此在这种情况下,返回十个数字的List。可能是我写错了。这里可能是什么问题。或者可能有另一种解决方案。我希望它有很多任务可以在同一个列表中添加数字,因此生成时间至少会快两倍。提前致谢
【问题讨论】: