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

标签 c# task-parallel-library task

我正在使用任务来执行一些流程。任务将处于循环状态,我不确定会有多少任务/迭代。它会不时变化。如何使用任务?下面是我的代码。

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[] 任务 使用 null,我将收到 Object reference not set to an instance of an object 错误。

如果我让它未赋值,我会收到Use of unassigned variable错误。

最佳答案

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

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

在列表中添加新创建的任务。

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

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

关于c# - 使用 Task[] 对象引用时未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20257675/

相关文章:

C# MongoDB。在数组中查找项目并仅选择此项

c# - 在 C# 中检测系统从 sleep 中唤醒的事件

c# - System.Web.Http.HttpPut 与 System.Web.Mvc.HttpPut 之间有什么区别

c# - 如何链接独立的 C# 任务?

.net - 使用 TransformBlock 捕获原始异常

C# Regex.Split - 子模式返回空字符串

c# - 如何使用并行任务在单独的线程中运行带参数的方法

c# - 我可以尝试从 BlockingCollection<T> 中获取一组项目吗?

linq - 带有 Select 的 Task.WhenAll 是一把枪——但为什么呢?

Android 如何最小化通话屏幕并向前移动我自己的任务 - Android 10 (2.3.3)