【问题标题】:Calling same method asynchronoulsy inside a for loop and catching the result properly在 for 循环中异步调用相同的方法并正确捕获结果
【发布时间】:2011-12-21 21:52:21
【问题描述】:

我有一个方法可以检查 SQL Server 是否可用

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 返回,直到所有异步调用都返回

如何做到这一点?

【问题讨论】:

    标签: c# asynchronous


    【解决方案1】:

    字典需要在函数之外。

    您需要进行异步调用,并有一个回调方法到另一个函数,然后更新字典。

    将此行更改为:

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

    然后创建函数:

    static void CallbackMethod(IAsyncResult ar)
        {
    
        }
    

    然后在那里进行更新。

    阅读本文了解更多信息:Calling Synchronous Methods Asynchronously

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2019-04-28
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多