我们目前每天从第三方公司收到许多webhook。
webhooks数据包含开始日期和结束日期以及用户ID。当这些webhook进入时,我首先检查以确保数据库中不存在该记录。例如
var CheckForDuplicateRefreshWebhook = await db.DataRefreshes.SingleOrDefaultAsync(x => x.startdate = startdate && x.enddate == enddate && x.userid == userid);
if(CheckForDuplicateRefreshWebhook == null)
{
//Insert Record
} else {
//Dont Insert Record
}
现在我遇到的问题是2个精确的webhook以毫秒为单位。这很少发生,但仍然将两个webhooks数据插入数据库。
我认为第一个webhook进来了,而现有记录的检查仍在执行第二个确切的webhook也在进入,其中检查记录是否在数据库中的代码尚未完成正在执行,并且正在添加两个确切的webhook。
我想知道是否有办法避免这种情况?我一直在寻找如何在继续之前等待任务完成但仍然没有成功。
总的来说,在插入第二个webhook之前,重复的webhook正在快速进入第一个插件尚未完成。
基于何时进入webhook,我们还执行另一组函数,这些函数还将另一组记录插入到另一个表中,并在另一个表中创建重复项。
由于
答案 0 :(得分:0)
Windows具有许多同步功能。 。 。实际上很难知道哪些可以使用。搜索信号量,互斥量和关键部分。 。 。每个人都有自己的优势和劣势。 。 。阅读所有内容然后根据您的具体情况决定。
答案 1 :(得分:0)
解决此方案的一种方法是将入站数据放入队列,并使辅助线程或进程按照项目放入其中的顺序通过队列。
这可能会出现性能问题,因为瓶颈是处理队列中的项目的单个进程。