C# 使用wait创建一个返回函数
大家好,我编写了一些代码来获取mongodb服务器中存在的数据库列表。 列表存储在lst中,我想让函数返回一个结果,所以我用完了。 这是第一种方法,它工作得很好C# 使用wait创建一个返回函数,c#,mongodb,C#,Mongodb,大家好,我编写了一些代码来获取mongodb服务器中存在的数据库列表。 列表存储在lst中,我想让函数返回一个结果,所以我用完了。 这是第一种方法,它工作得很好 public static async void listDatabases() { List<string> lst = null; try { MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");
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);
}
}
公共静态异步void listDatabases()
{
列表lst=null;
尝试
{
MongoClient=新的MongoClient(“mongodb://127.0.0.1:27017");
//MongoServer server=client.GetServer();
//List lstdatabases=server.GetDatabaseNames().ToList();
使用(var cursor=client.ListDatabasesAsync())
{
等待cursor.Result.ForEachAsync(d=>lst.Add(d.GetElement(0.Value.ToString());
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如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;
}
}
publicstaticasynchvoidlistdatabases(out-List lstListDB)
{
列表lst=null;
尝试
{
MongoClient=新的MongoClient(“mongodb://127.0.0.1:27017");
//MongoServer server=client.GetServer();
//List lstdatabases=server.GetDatabaseNames().ToList();
使用(var cursor=client.ListDatabasesAsync())
{
等待cursor.Result.ForEachAsync(d=>lst.Add(d.GetElement(0.Value.ToString());
lstListDB=lst;
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
lstListDB=null;
}
}
它说我不能使用out with async方法任何帮助谢谢你不能使用
out
inasync
方法。但是,要从异步方法返回数据,只需返回类型为Task
。就你而言:
public static async Task<List<string>> listDatabases()
你可以这样称呼它:
var list = await listDatabases();
另一方面,在
async
方法中,您应该避免返回类型为void
,相反,您可以使用返回类型为Task
让方法返回Task
。如果可能的话,你应该尽量避免像async void
这样的返回,我不知道你说你可以用async方法来完成,对于我做不到的任务,任何帮助都是新的正确答案,应该说,使用async void
模式意味着触发并忘记调用。如果该方法随后失败(抛出异常)-没有人会这样做know@Gh61:async void
方法将在其SynchronizationContext
上重新引发任何异常,这在许多情况下会使进程崩溃。我喜欢称之为“火灾和崩溃”,而不是“火灾和遗忘”。
var list = await listDatabases();