我有一个检查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返回,直到返回所有异步调用
怎么做?
答案 0 :(得分:1)
字典需要在函数之外。
你需要进行异步调用,并为另一个函数提供一个回调方法,然后更新字典。
将此行更改为:
IAsyncResult res = serverConn.BeginInvoke(conn, new AsyncCallback(CallbackMethod), null);
然后创建函数:
static void CallbackMethod(IAsyncResult ar)
{
}
然后在那里进行更新。
阅读本文以获取更多信息:Calling Synchronous Methods Asynchronously