我有以下场景,每x分钟一次计时器:
现在应用程序功能齐全,但我希望在应用程序处理应用程序时加快下载另一项(如果存在于其余服务中)的整个过程。
我认为我需要一个缓冲区/队列来实现这一点,比如BlockingCollection,但我不知道如何使用它。
完成我想要做的事情的正确方法是什么?
提前谢谢!
答案 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()
。