【问题标题】:Using TPL for file download scheduler and processing each of those files使用 TPL 进行文件下载调度程序并处理每个文件
【发布时间】:2012-12-17 00:58:57
【问题描述】:

我当前的项目正在使用 .net 2.0 线程,并且有一个主线程用于调度 1.文件下载线程和 2.文件处理线程。我可以限制并行处理的最大线程数,比如 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 的最佳方法是什么?

【问题讨论】:

  • “我需要为 getfile 和 processfile 实现 TPL” 你能解释一下你的意思吗?

标签: .net task-parallel-library


【解决方案1】:

我认为您的代码可以如下编写。这样您就不需要手动将工作项排队。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多