大家好我做了一些代码来获取mongodb服务器中存在的数据库列表。 列表存储在lst我想让函数返回一个结果,所以我用完了。 这是第一种工作正常的方法
public static async void listDatabases()
{
List<string> lst = null;
try
{
MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");
//MongoServer server = client.GetServer();
// List<string> lstdatabases = server.GetDatabaseNames().ToList();
using (var cursor = client.ListDatabasesAsync())
{
await cursor.Result.ForEachAsync(d => lst.Add(d.GetElement(0).Value.ToString()));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这里我尝试使函数返回值
public static async void listDatabases(out List<string> lstListDB)
{
List<string> lst = null;
try
{
MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");
//MongoServer server = client.GetServer();
// List<string> lstdatabases = server.GetDatabaseNames().ToList();
using (var cursor = client.ListDatabasesAsync())
{
await cursor.Result.ForEachAsync(d => lst.Add(d.GetElement(0).Value.ToString()));
lstListDB = lst;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
lstListDB = null;
}
}
它表示我无法使用异步方法帮助感谢
答案 0 :(得分:3)
您无法在out
方法中使用async
。但是,从异步方法返回数据只需返回类型Task<T>
。在你的情况下:
public static async Task<List<string>> listDatabases()
然后您可以在方法中执行以下操作:
return lst;
然后你可以这样称呼它:
var list = await listDatabases();
在旁注中,您应该避免使用void
方法中的async
返回类型,而是可以使用返回类型Task
。