c# - 在 C# 中使用异步等待轮询
问题描述
这是我的场景:我们有一个库,它在一个类中有一个“MethodA”,它使用 C# HttpClient 进行 http 调用并检索队列中的所有通知。我们正在使用 .NET Core 3.1。我想在同一个库中添加另一个类,它将在预定的时间间隔调用这个“MethodA”。我在我的测试应用程序中使用了 Task.Run 和 Task.Delay 来实现这一点,并且它可以工作。唯一的问题是这是一个 I/O 绑定调用,而不是 CPU 绑定操作,Stephen Cleary 建议避免在此处对 I/O 绑定调用使用Task.Run。我怎样才能做到这一点?
谢谢,萨尔
解决方案
您的操作系统已经以事件驱动的方式处理了 I/O 绑定调用。例如,Windows 使用重叠的文件调用来实现。
所以你的问题的答案是,不要使用线程池,等待操作系统调用Stream.ReadAsync
和朋友。
编辑:我刚刚注意到你在谈论HttpClient
,同样的答案也适用于那里。获取响应流并对其使用async
读取调用,而不是无缘无故地占用您的线程池。
推荐阅读
- ruby-on-rails - 如何设置默认标题?
- python - Python - 将 csv 文件上传到 Dropbox
- postgresql - PostgreSQL Upsert DO 更新
- python - 无法将 padded_batch tf.data.Dataset 传递给 tf.estimator
- python - 向量不能被写入,也不能将 WRITEABLE 标志设置为 True
- regex - 使用正则表达式获取字符串中的空格数
- c# - 模态中的多个视图
- php - 解析现有帖子的 Wordpress 方法
- powershell - Powershell 总是以“管理员身份”打开
- arrays - 可变数组/列表内存大小