在for循环中异步调用相同的方法并正确捕获结果
本文关键字:方法 结果 循环 for 异步 调用 | 更新日期: 2023-09-27 18:18:24
我有一个方法检查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);
}
}
有谁能帮我吗?解决上述问题的方法是编写如何在回调
中将参数传递给异步方法中提到的lambda表达式但是我需要一个解决方案来延迟函数CheckCubeAccessibility返回,直到所有异步调用返回
如何做到这一点?
Dictionary需要在函数之外。
你需要做Async调用,并有一个回调方法到另一个函数,然后更新字典。
将这一行改为:
IAsyncResult res = serverConn.BeginInvoke(conn, new AsyncCallback(CallbackMethod), null);
然后创建函数:
static void CallbackMethod(IAsyncResult ar)
{
}
然后在那里更新。