1

我目前的项目正在使用 .net 2.0 线程,并且有一个用于调度 1.File 下载线程和 2.File Processing Thread 的主线程。我可以限制并行处理的最大线程数,例如 16 个(可能是 10 个文件下载和 6 个已下载文件的文件处理)。我想使用 TPL 迁移我的代码。

Thread workerThread = null;
switch (Status)
{
    case StatusEnum.FileWatchLocked:
        workerThread = new Thread(workflowMgr.GetFiles);
        break;
    case FPFStatusEnum.ProcessLocked:
        workerThread = new Thread(workflowMgr.ProcessFiles);
        break;
}
lock (_threadCountMonitor)
{
    _workFlowPool.Add(workerThread, workflowMgr);
    _workFlowThreadIDPool.Add(workerThread.ManagedThreadId, workerThread);
    workerThread.Start();
    ++_threadCount;
}

我需要跟踪某项任务是否已完成,并且我可以安排更多工作。我还需要为 getfile 和 processfile 实现 TPL。TPL 的最佳方法是什么?

4

1 回答 1

0

我认为您的代码可以如下编写。通过这种方式,您无需手动将工作项排队。

foreach (var uri in uris)
{
    string filename = "urixxx"; //get local file name
    Task.Factory.StartNew(() =>
    {
        DownloadFile(uri, filename); 
    }).ContinueWith((t) =>
            {
                ProcessFile(filename);
            });
}
于 2012-12-07T04:53:13.617 回答