Tag: 长期运行进程

这是正确的实施吗?

我有一个Windows服务需要从数据库中选择作业并需要处理它。 在这里,每项工作都是一个扫描过程,大约需要10分钟才能完成。 我是Task Parallel Library的新手。 我已通过以下方式实现为示例逻辑: Queue queue = new Queue(); for (int i = 0; i < 10000; i++) { queue.Enqueue(i); } for (int i = 0; i { var Objdata = (Queue)data; Console.WriteLine(Objdata.Dequeue()); Console.WriteLine( “The current thread is ” + Thread.CurrentThread.ManagedThreadId); }, queue, TaskCreationOptions.LongRunning); } Console.ReadLine(); 但是,这创造了很multithreading。 由于循环重复100次,因此创建了100个线程。 创建那么多并行线程是正确的方法吗? 有没有办法将线程数限制为10(并发级别)?

从ASP.NET或预定作业启动长时间运行的后台任务

我有一个相当长时间运行的过程(几分钟),我需要每月大约运行一次 – 但不是在固定的时间表上,而是在用户单击ASP.NET Webforms GUI页面中的Go之后。 由于ASP.NET实际上并不是为处理长时间运行的后台任务而设计的,我的想法是把它放到一个单独的控制台应用程序中。 但是如何根据需要推出? 如果我从ASP.NET页面的代码隐藏中使用Process.Start(….)会发生什么? 我想避免阻止整个Web UI大约20分钟……而且:即使它没有阻止我的UI,如果ASP.NET应用程序池在它仍处于循环状态时再循环,我的长时间运行任务会发生什么运行? 另一个想法是让一个频繁运行的作业(每2分钟运行一次)检查某种标志(例如存在一些数据库条目),如果需要,该作业将启动长期运行的任务。 但同样的问题:如果我使用Process.Start()从作业启动我的20分钟任务 – 这会阻止调用者吗? 由于通常每月只运行一次,因此每天五次安排长时间运行的任务似乎有点过分 – 但同时,用户希望在合理的时间内(小于1)获得他的结果安排过程后的小时,如果有可能的话 – 所以我不能真正安排它在晚上运行一次……