我开发了一个多线程应用程序,它在数据库中插入一些数据。 假设我有以下情况:
public void Foo()
{
Task.Factory.StartNew(() => AddTeams());
Task.Factory.StartNew(() => AddTable());
}
正如您所看到的,我调用两种不同的方法将数据插入到数据库中,问题是每个方法都需要检查特定表中是否存在特定记录:
public void AddTeams()
{
//Pseudo code:
//Check if a team with id 1249 exist in the table team
//if not exist in the table team, insert the team with id 1249
//then insert the record attached with an `FK` to the team table.
}
同样的事情发生在AddTable
,所以有时我会收到这个错误:
'重复输入' 1249'对于关键' PRIMARY
因为AddTable
方法检查失败,失败的原因是我使用的并行化,总结:时间问题。
我该如何管理?
我想到的唯一方法是处理异常,但我不喜欢这种方法。
答案 0 :(得分:2)
您只需要不并行化查询以获取团队并在必要时创建它。你不想或不需要做两次,开始时只需要做一次。因此,获取或创建团队,获取该团队的主键,然后将其传递给这两个方法,每个方法创建一个相关对象,这可以并行完成。