下载时处理

时间:2017-03-08 09:54:47

标签: c# .net multithreading timer

我有以下场景,每x分钟一次计时器:

  1. 从休息服务(用php制作)
  2. 下载项目
  3. 运行流程批处理以详细说明项目
  4. 现在应用程序功能齐全,但我希望在应用程序处理应用程序时加快下载另一项(如果存在于其余服务中)的整个过程。

    我认为我需要一个缓冲区/队列来实现这一点,比如BlockingCollection,但我不知道如何使用它。

    完成我想要做的事情的正确方法是什么?

    提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以做的是创建一个检查要下载的新文件的功能。将此函数作为自己的后台线程启动,该线程在无限循环中运行,检查每次迭代中的新下载。如果找到任何需要下载的文件,请调用单独的函数将文件下载为新线程。然后,一旦文件完成下载,这个新的下载功能就可以将处理功能作为另一个线程调用。使用这种方法,如果需要,您将并行运行多个文件的所有任务。

通过执行此操作可以将函数作为新线程启动

Thread thread = new Thread(FunctionName);
thread.start();

答案 1 :(得分:0)

使用Microsoft的Reactive Framework(NuGet" System.Reactive")。然后你可以这样做:

var x_minutes = 5;

var query =
    from t in Observable.Interval(TimeSpan.FromMinutes(x_minutes))
    from i in Observable.Start(() => DownloadAnItem())
    from e in Observable.Start(() => ElaborateItem(i))
    select new { i, e };

var subscription =
    query.Subscribe(x =>
    {
        // Do something with each `x.i` & `x.e`
    });

多线程且简单。

如果您想停止处理,请拨打subscription.Dispose()