0
我有一种方法解析属于某个用户的一些数据并将其保存到数据库。如何在使用BeginInvoke进行多线程时锁定资源?
delegate void parseUserDataDelegate(string pathToFile);
我为它创建了一个委托并使用BeginInvoke进行呈现以进行并行处理。
parseUserDataDelegate deleg = new parseUserData(this.parseUserData);
IAsyncResult result = deleg.BeginInvoke(path, null, null);
deleg.EndInvoke(result);
问题是有两个表 - 一个用于外键是用户ID和另一个用户表的数据。当解析时没有相应的用户时,该方法向用户表中添加一个新条目并使用其ID。一个用户的数据表中大约有100个条目。问题是,当处理第一个用户的所有数据时,会出现错误,因为两个线程尝试为第二个用户创建相同的条目。如何锁定不同线程的用户表访问权限?
如果您立即调用BeginInvoke并紧接着EndInvoke,则不会有并行处理。调用EndInvoke的线程将等待操作完成。 – 2012-01-12 15:01:52
我建议你在做任何事务之前先检查新用户。插入它们,然后只在第二张桌子上工作......除非我错过了一些你的逻辑 – Boomer 2012-01-12 15:03:38