【发布时间】:2017-10-20 08:22:50
【问题描述】:
我正在尝试制作一个 C# WinForms 应用程序,该应用程序从保存在名为“链接”的表中的 url 获取数据。每个链接都有一个“最后检查”和“下一次检查”日期时间,并且有一个“间隔”根据最后一次检查决定“下一次检查”。
现在,我正在做的是在进行网络抓取之前使用查询获取 ID,然后我将 Last Checked 转换为 DateTime.Now 并将 Next Check 转换为 null,直到所有操作完成。在网络抓取完成后,两者都会得到更新。
问题是如果正在进行的进程有任何“中止”,lastcheck 将是一个日期,但 nextcheck 将为空。
所以我需要一个更好的方法让两个进程不能在同一张表的同一行上工作。但不确定如何。
【问题讨论】:
-
添加您正在使用的 DBMS 的标签
-
抱歉,添加了!
-
你是否使用多个线程进行抓取?
-
技术上我现在不是,但我正在尝试安排它。我创建了一个“WebScrape”类,该类基于“LINKS”表中的链接获取带有 HTML-Agility-Pack 的 HTML 文档,这些链接具有“NextCheck”时间。我有一个函数来创建此类的新实例,其中包含“numberOfText”或“ImageSize”之类的值,这些值稍后会根据 LinkID(LINKS 表上的 ID)添加到 PROCESSES 表中,并更新 lastcheck 和 nextcheck 时间链接。所以我打算为每个链接设置 N 个调用这些类的函数。
-
问题是你最终同时做 2 件事 - 即 2 个相同的请求/抓取?还是如果刮擦失败,它会在数据库中将下一个检查设置为空?还是两个问题?
标签: c# sql sql-server multithreading