将参数传递到.NET中的Task.Factory.StartNew

本文关键字:Task Factory StartNew 中的 NET 参数传递 | 更新日期: 2023-09-27 18:25:15

我正在开发一个小型实用程序,它将扫描一个FTP文件夹,该文件夹为我们网络上的每个打印机都有一个文件夹。在每个打印机文件夹中,都会有需要打印的文件。

所以,这是我迄今为止的测试代码:

namespace PrintTest
{
    class Program
    {
        const string ftpDir = @"C:'Users'Latheesan'Desktop'FTP";
        static void Main(string[] args)
        {
            StartScan();
            Console.ReadKey();
        }
        static void StartScan()
        {
            // Scan ftp dir
            var printerDirs = Directory.GetDirectories(ftpDir);
            // Proceed if any printer dirs were found
            if (printerDirs.Length > 0)
            {
                // Init task list
                Task[] scanPrinterTasks = new Task[printerDirs.Length];
                // Iterate through each found printer dir
                for (int i = 0; i < printerDirs.Length; i++)
                {
                    // Configure printer tasks
                    var printerName = printerDirs[i];
                    printerDirs[i] = Task.Factory.StartNew(() => 
                        ScanPrinterDir(printerName));
                }
                // Wait for all tasks to finish
                Task.WaitAll(scanPrinterTasks);
            }
        }
        static void ScanPrinterDir(string printerName)
        {
            // todo
        }
    }
}

当我试图编译这个时,我得到了以下错误:

严重性代码描述项目文件行错误CS0029无法将类型"System.Threading.Tasks.Task"隐式转换为'string'PrintTest C:''Users''Latheesan''Desktop''PrintTest''PrintTest ''Program.cs 34

如何将参数传递给Task.Factory.StartNew调用的方法?

将参数传递到.NET中的Task.Factory.StartNew

在这里传递参数没有错,但是Task.Factory.StartNew的返回类型是Task,而不是字符串,这就是为什么会出现编译时错误的原因。

我想你需要

       scanPrinterTasks[i] = Task.Factory.StartNew(() => 
                    ScanPrinterDir(printerName));

而不是

      printerDirs[i] = Task.Factory.StartNew(() => 
                    ScanPrinterDir(printerName));