请查看下面的代码行
int latestTaskId = _repo.GetLatestTaskID(bookingRequest.CaseId);
根据上面的代码,我们尝试从SQL Server数据库中检索latestTaskId
。如果在数据库中latestTaskId为null,我们需要在此行上执行。
由于latestTaskId
等基因在数据库中被其他一些代码更新,GetLatestTaskID
方法应该重新调用latestTaskId
,执行应该继续下一个语句。
有人能建议一个合适且性能有效的解决方案来满足这一要求吗?
提前致谢! :)
答案 0 :(得分:0)
使用此:
Context.Entry<T>(entity).Reload()
并查询整数,如果该值没有再次更新重新加载。
答案 1 :(得分:0)
您可以使用ManualResetEventSlim
来实现此目的。 ManualResetEventSlim.Wait()
将阻止执行线程,直到调用ManualResetEventSlim.Set()
为止。
请在_repo.GetLatestTaskID(bookingRequest.CaseId);
之前致电ManualResetEventSlim.Wait()
。在数据库中更新Lastest Task Id
后,不要忘记调用ManualResetEventSlim.Set()
。
示例:
public class Program
{
static ManualResetEventSlim latestIDIisNotNUll = new ManualResetEventSlim();
public static void Main()
{
Task.Run(() =>
{
Thread.Sleep(5000);
UpdateLatestTaskID();
});
int latestTaskId = GetLatestTaskID();
Console.WriteLine("Latest Task ID: " + latestTaskId);
Console.ReadLine();
}
private static void UpdateLatestTaskID()
{
//Your update code
Console.WriteLine("Latest ID is set");
latestIDIisNotNUll.Set();
}
private static int GetLatestTaskID()
{
Console.WriteLine("Wating for latest ID");
latestIDIisNotNUll.Wait();
int latestTaskId = 5;//_repo.GetLatestTaskID(bookingRequest.CaseId);
return latestTaskId;
}
}