等到数据库中的列值更新并在C#中重新调整值?

时间:2016-09-21 06:00:30

标签: c# sql-server performance threadpool

请查看下面的代码行

int latestTaskId = _repo.GetLatestTaskID(bookingRequest.CaseId);

根据上面的代码,我们尝试从SQL Server数据库中检索latestTaskId。如果在数据库中latestTaskId为null,我们需要在此行上执行。

由于latestTaskId等基因在数据库中被其他一些代码更新,GetLatestTaskID方法应该重新调用latestTaskId,执行应该继续下一个语句。

有人能建议一个合适且性能有效的解决方案来满足这一要求吗?

提前致谢! :)

2 个答案:

答案 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;
    }
}