【问题标题】:How to return current trending hashtags from Instagram API Sharp in C#如何在 C# 中从 Instagram API Sharp 返回当前趋势标签
【发布时间】:2021-05-17 16:19:10
【问题描述】:

我正在尝试使用 Instagram API Sharp C# API 来尝试返回当前流行的主题标签列表。我找到了添加该功能的页面,但我认为我不了解如何实现它。

这里是开发人员所说的实现方式的链接:https://github.com/ramtinak/InstagramApiSharp/issues/227

这是我将其添加到项目时遇到的错误

public static async Task<List<String>> GetPopularTags()
{
     var test = InstaApi.HashtagProcessor.GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1)).Wait();
}

我一般是编程新手,所以它可能是一个简单的修复。任何帮助将不胜感激。

【问题讨论】:

    标签: c# instagram instagram-api


    【解决方案1】:

    问题似乎出在您调用GetTopHashtagMediaListAsync 的方式上。这与这个特定的API无关,而是对如何在C#中使用Tasks的误解。

    先提醒一下:在 SO 上发布与代码相关的问题时,请尽可能以文本而不是图像的形式提供代码和错误/异常。如果能以文本格式查看您的代码,那就太好了。

    无论如何...以下返回Task&lt;IResult&lt;InstaSectionMedia&gt;&gt;

    InstaApi.HashtagProcessor
         .GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));
    

    但是,您在其上调用Wait(),它不会返回值(返回类型void),而是阻止当前线程等待Task 完成。这样做你也会失去对任务的引用。一种解决方案(虽然不是正确的解决方案,但仅用于说明目的)是将其拆分为三个步骤:

    // Get/start the task
    var task = InstaApi.HashtagProcessor
         .GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));
    // Wait for it to complete
    task.Wait();
    // Use the result
    var result = task.Result;
    // ...
    

    如前所述,这不是一个很好的解决方案,因为您通过调用Wait() 实质上阻塞了当前线程,它占用了您的应用程序中的一个线程,除了等待之外什么都不做。使用Tasks 时,您通常希望await 它利用C# 中内置的异步功能(实际上您已经使用async 关键字为它准备了方法)。因此,处理代码的更好方法是将上述所有三个步骤合并到一个 await 语句中:

    var result = await InstaApi.HashtagProcessor
         .GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));
    

    这样,您可以让应用程序在等待任务完成时将线程用于其他事情。完成后,结果将分配给result,代码将从中断处继续。

    【讨论】:

    • 好的,谢谢让我知道代码块,我用代码编辑了问题。但是,我仍然收到错误消息。然而,错误不是因为.Wait() 部分。我刚刚创建了一个“InstaApi”实例,然后在下面引用它。我会用更好的解释来回答我自己的问题
    【解决方案2】:

    原来我需要创建一个 InstaApi 的实例并使用它来获取 Hashtags 列表

    public static IInstaApi api = InstaApiBuilder.CreateBuilder().SetUser(userSession)
                                                                         .UseLogger(new DebugLogger(InstagramApiSharp.Logger.LogLevel.All))
                                                                         .Build();
    
    
    public static async Task<List<String>> GetPopularTags()
    {
          var test = await api.HashtagProcessor.GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));       
    }
    
    

    我也错误地使用了.Wait() 方法。我必须在前面添加“等待”才能正确接收结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多