2012-12-07 72 views
1

我目前的項目是使用.net 2.0線程,並有一個主線程調度1.File下載線程和2.文件處理線程。我可以限制並行處理的最大線程數,例如16(對於已經下載的文件可能是10個文件下載和6個文件處理)。我想使用TPL遷移我的代碼。使用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最好的方法是什麼?

+0

「我需要爲getfile和processfile實現TPL」你能解釋一下到底是什麼意思嗎? – svick

回答

0

我認爲你的代碼可以寫成如下。通過這種方式,您不需要手動排隊工作項目。

foreach (var uri in uris) 
{ 
    string filename = "urixxx"; //get local file name 
    Task.Factory.StartNew(() => 
    { 
     DownloadFile(uri, filename); 
    }).ContinueWith((t) => 
      { 
       ProcessFile(filename); 
      }); 
} 
相關問題