等到数据库中的列值更新后,c#才返回值

本文关键字:返回值 更新 数据库 | 更新日期: 2023-09-27 18:08:05

请查看下面一行代码

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

根据上面的代码,我们正在尝试从SQL Server数据库检索latestTaskId。如果数据库中的latestTaskId为空,我们需要保持这一行的执行。

当数据库中的latestTaskId被其他代码更新后,GetLatestTaskID方法应该返回latestTaskId,并继续执行下一条语句。

谁能提出一个合适的,性能有效的解决方案来满足这一要求?

提前感谢!:)

等到数据库中的列值更新后,c#才返回值

使用

Context.Entry<T>(entity).Reload()

和查询的整数,如果值没有更新重新加载。

您可以使用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;
    }
}