用await做一个返回函数

时间:2017-04-13 09:52:30

标签: c# mongodb

大家好我做了一些代码来获取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;
    }
}

它表示我无法使用异步方法帮助感谢

1 个答案:

答案 0 :(得分:3)

您无法在out方法中使用async。但是,从异步方法返回数据只需返回类型Task<T>。在你的情况下:

public static async Task<List<string>> listDatabases()

然后您可以在方法中执行以下操作:

return lst;

然后你可以这样称呼它:

var list = await listDatabases();

在旁注中,您应该避免使用void方法中的async返回类型,而是可以使用返回类型Task