2011-12-21 17 views
0

我有檢查一個SQL Server是否可寫,它接受一個有字典密鑰的方法的方法或不調用內部的相同方法asynchronoulsy for循環和追趕結果正常

public static bool IsServerAvailable(string connection) 
    { 
     bool isAvailable = false; 
     try 
     { 
      using (SqlConnection conn = new SqlConnection(connectionString)) 
      { 
       conn.Open(); 
       isAvailable = true; 
      } 
     } 
     catch 
     { 
      isAvailable = false; 
     } 
     return isAvailable; 
    } 

現在我有作爲連接字符串和更新值取決於從上面返回的結果方法

但問題是我需要進行異步調用和能夠做到,但面臨的問題與更新字典中相應的conn(鍵)的值

public delegate bool CheckConnectionDelegate(string conn); 

    public static void CheckCubeAccessibility(Dictionary<ServerName, bool> serverDict) 
    { 
     string conn; 
     //Create the delegate 
     CheckConnectionDelegate serverConn = new CheckConnectionDelegate(IsServerAvailable); 

     foreach (var server in serverDict) 
     { 
      switch (server.Key) 
      { 
       case ServerName.A: 
        conn = "A"; 
        break; 
       case ServerName.B: 
        conn = "B"; 
        break; 
       case ServerName.C: 
        conn = "C"; 
        break; 
      } 
      //Call the begin invoke method 
      IAsyncResult res = serverConn.BeginInvoke(conn, null, null); 

     } 

    } 

任何人都可以幫助我嗎?

對於上述問題

解決方案是 寫在How to get the parameters passed to the asynchronous method in the callback

提到lambda表達式但我需要一個解決方案延遲功能CheckCubeAccessibility返回,直到所有的異步調用返回

如何做到這一點?

回答

1

該詞典需要在功能之外。

您需要進行異步調用,並對其他函數執行回調方法,然後更新字典。

改變這一行到:

IAsyncResult res = serverConn.BeginInvoke(conn, new AsyncCallback(CallbackMethod), null); 

然後創建功能:

static void CallbackMethod(IAsyncResult ar) 
    { 

    } 

然後做您的更新存在。

閱讀此處以瞭解更多信息:Calling Synchronous Methods Asynchronously