C# 使用wait创建一个返回函数

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");

大家好,我编写了一些代码来获取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);
    }
}
公共静态异步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
in
async
方法。但是,要从异步方法返回数据,只需返回类型为
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();