c# - 如何在 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();
}
我一般是编程新手,所以它可能是一个简单的修复。任何帮助,将不胜感激。
解决方案
问题似乎是你打电话的方式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()
,这占用了您的应用程序中的一个线程,除了等待之外什么都不做。使用Task
s 时,您通常希望await
它利用 C# 中内置的异步功能(实际上您已经使用async
关键字为它准备了方法)。因此,处理代码的更好方法是将上述所有三个步骤合并到一个await
语句中:
var result = await InstaApi.HashtagProcessor
.GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));
这样,您可以让应用程序在等待任务完成时将线程用于其他事情。完成后,将分配结果,result
并且代码将在中断处继续。
推荐阅读
- c# - 如何从通过 C# 转换为字符串的字符串或 html 日志文件发送数据并将其发送到 ElasticSearch,以便在 kibana 上显示
- delphi - 使用Generics.add时如何避免内存泄漏
- amazon-web-services - 无法将数据批量加载到 Neptune
- ios - Xcode:创建新项目时出现 pod install 错误
- python - 根据特定条件合并数据框列值并将其存储在新列中
- bbc-microbit - 通过 MicroBlocks 中的 Micro:bit Radio 传输音频
- r - 在 R 中总结日期和时间范围内的观察
- javascript - 名称显示为“未定义”
- java - 需要帮助了解为什么否定条件在 Pitest 中幸存下来
- node.js - 如何在 Chromebook 上的 Visual Studio Code 中打开本地文件?