使用Task [] Object引用时未设置为对象的实例

时间:2013-11-28 04:24:43

标签: c# task-parallel-library task

我正在使用Tasks来执行某些过程。任务将循环,我不确定将有多少任务/迭代。它会不时变化。如何使用任务?以下是我的代码。

void func1(string loc) 
{
    var CurrentDirectoryInfo = new DirectoryInfo(loc);
    Task[] tasks; // null
    int index = 0;

    foreach (DirectoryInfo D1 in CurrentDirectoryInfo.GetDirectories)
    {
        tasks[index] = Task.Factory.StartNew(() =>func1(d1.FullName));
        index++;
    }

如果我对Task[] tasks使用null,则会收到Object reference not set to an instance of an object错误。

如果我将其保留为未分配状态,则会出现Use of unassigned variable错误。

1 个答案:

答案 0 :(得分:1)

如果您不知道编译时需要多少个任务对象,则可以使用任务列表。

List<Task> tasks = new List<Task>();

在列表中添加新创建的目标。

foreach(DirectoryInfo D1 in CurrentDirectoryInfo.GetDirectories)
{
    tasks.Add(Task.Factory.StartNew(() =>func1(d1.FullName)));
}

为目录对象创建任务对象的代码没有意义。您应该考虑替代方法,您可以使用单一任务以更有效的方式实现此目的。