2016-09-21 94 views
0

請查看下面的代碼等待數據庫中的列值更新並在C#中重新繪製值?

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

按照上面的代碼行,我們正在嘗試從一個SQL Server數據庫的latestTaskId。如果latestTaskId在數據庫中爲null,那麼我們需要在該行上保持執行。

由於soons如latestTaskId在數據庫中通過一些其他的代碼更新,GetLatestTaskID方法應該retun latestTaskId和執行應該繼續下一條語句。

任何人都可以提出一個合適的和性能有效的解決方案來滿足這個要求嗎?

在此先感謝! :)

回答

0

使用此:

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

和查詢的整數,如果值沒有再更新重裝。

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