首页 > 解决方案 > 如何在 C# 中从 Instagram API Sharp 返回当前趋势标签

问题描述

我正在尝试使用 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#instagraminstagram-api

解决方案


问题似乎是你打电话的方式GetTopHashtagMediaListAsync。这与这个特定的 API 无关,而是对如何Task在 C# 中使用 s 的误解。

首先注意一点:在 SO 上发布与代码相关的问题时,请尽可能以文本而不是图像的形式提供代码和错误/异常。很高兴以文本格式查看您的代码。

无论如何......以下返回一个Task<IResult<InstaSectionMedia>>

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并且代码将在中断处继续。


推荐阅读