2016-09-21 10 views
0

コード上記のコードを1としてデータベースでカラム値が更新され、C#でリターンされるまで待つ?

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

の線の下に確認してください、私たちは、SQL ServerデータベースからlatestTaskIdを取得しようとしています。 latestTaskIdがデータベース内でnullの場合、この行を実行する必要があります。

latestTaskIdが他のコードによってデータベース内で更新されると、GetLatestTaskIDメソッドは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; 
    } 
} 
関連する問題