【问题标题】:Convert an async method to non-async [duplicate]将异步方法转换为非异步 [重复]
【发布时间】:2017-09-23 22:54:15
【问题描述】:

我目前的代码如下所示:

private async Task<ListFolderResult> ListFolder(DropboxClient client, string path)
{
    Console.WriteLine("--- Files ---");
    var list = await client.Files.ListFolderAsync(path);

    return list;
}

并且是这样调用的:

var list = await ListFolder(client, path);

我想更改该代码,使调用如下所示:

var list = ListFolder(client, path);

然后等待移动到ListFolder 方法的内部。

【问题讨论】:

  • 只需从ListFolder 中删除async/await 并添加等待:client.Files.ListFolderAsync(path).Resultclient.Files.ListFolderAsync(path).Wait()
  • 如果您想将其作为完整代码的答案发布,我将接受并删除我的答案。
  • 也许反对的选民可能会费心发表评论,说明为什么这是一个糟糕的问题?
  • 如果我选择的重复还不够 - 请务必检查类似的答案 - bing.com/search?q=c%23+call+async+method+synchronously

标签: c#


【解决方案1】:

这在控制台应用程序中对我有用,但如果有人发布更一般的答案,我会很乐意删除此答案。

private ListFolderResult ListFolder(DropboxClient client, string path)
{
    Console.WriteLine("--- Files ---");
    var list = client.Files.ListFolderAsync(path);
    list.Wait();

    return list.Result;
}

【讨论】:

  • 如果此答案有问题,请发表评论或发布另一个答案。
  • 建议的代码在大多数情况下(控制台或单元测试除外)几乎肯定会死锁而没有好的警告使这个建议成为不好的答案。 (忽略如何同步调用异步代码有很多更好的答案)
  • 顺便说一句:return client.Files.ListFolderAsync(path).Result 就足够了。无需等待。既然是单行函数,就不需要单独函数了
  • @Eser - 将其发布为答案,我会接受并删除我的答案。
猜你喜欢
  • 1970-01-01
  • 2021-04-12
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
相关资源
最近更新 更多