【问题标题】:make a return function with await用 await 做一个返回函数
【发布时间】:2017-09-09 09:11:48
【问题描述】:

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

它说我不能使用异步方法任何帮助谢谢

【问题讨论】:

  • 让方法返回一个Task&lt;List&lt;string&gt;&gt;Why you can't use out
  • 你应该尽可能避免像async void这样的回报
  • 我不知道它说你可以用 asynch 方法和 Task> 我做不到,任何帮助请只是新的

标签: c# mongodb


【解决方案1】:

你不能在你找到的async 方法中使用out。但是,要从异步方法返回数据,只需返回类型为 Task&lt;T&gt;。在你的情况下:

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

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

return lst;

你可以这样称呼它:

var list = await listDatabases();

附带说明,您应该避免在async 方法中使用void 的返回类型,而可以使用Task 的返回类型。

【讨论】:

  • 正确答案,应该说,使用async void模式意味着fire and forget调用。如果该方法失败(抛出异常) - 没有人会知道
  • @Gh61: async void 方法将在其SynchronizationContext 上重新引发任何异常,这在许多情况下会使进程崩溃。我喜欢称这些为“一发不可收拾”,而不是“一发不可收拾”。
猜你喜欢
  • 2021-05-06
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 2018-04-07
相关资源
最近更新 更多