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

时间:2015-12-01 11:59:23

标签: c# task

我正在开发一个小工具,它将扫描一个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调用的方法?

1 个答案:

答案 0 :(得分:4)

在这里传递参数没有任何问题,但是Task.Factory.StartNew的返回类型是任务而不是字符串,这就是你得到编译时错误的原因。

我认为你需要

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

而不是

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