如何为不接受取消令牌的异步函数设置超时?

2023-11-27

我的网络请求是由这段代码处理的;

Response = await Client.SendAsync(Message, HttpCompletionOption.ResponseHeadersRead, CToken);

在读取响应标头之后、内容读取完成之前返回。当我拨打这条线来获取内容时......

return await Response.Content.ReadAsStringAsync();

我希望能够在 X 秒后停止它。但它不接受取消令牌。


当你can依靠WithCancellation为了重用目的,一个更简单的超时解决方案(不会抛出OperationCanceledException)将创建一个超时任务Task.Delay并等待第一个任务完成Task.WhenAny:

public static Task<TResult> WithTimeout<TResult>(this Task<TResult> task, TimeSpan timeout)
{
    var timeoutTask = Task.Delay(timeout).ContinueWith(_ => default(TResult), TaskContinuationOptions.ExecuteSynchronously);
    return Task.WhenAny(task, timeoutTask).Unwrap();
}

或者,如果您想在超时时抛出异常,而不是仅返回默认值(即null):

public static async Task<TResult> WithTimeout<TResult>(this Task<TResult> task, TimeSpan timeout)
{
    if (task == await Task.WhenAny(task, Task.Delay(timeout)))
    {
        return await task;
    }
    throw new TimeoutException();
}

用法是:

var content = await Response.Content.ReadAsStringAsync().WithTimeout(TimeSpan.FromSeconds(1));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为不接受取消令牌的异步函数设置超时? 的相关文章

  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解)

    我正在尝试编写一个单词组合生成器 我的意思是打印 X 个字符数与 X 字符串长度的所有可能组合 首先 我需要说的是 我在 StackOverFlow 中看到了一个关于这个问题的问题 其中有很多单词生成器的答案来执行此操作 在不同的语言上 但
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • 从共享网络文件夹运行的 .NET 应用程序的性能损失

    从共享网络文件夹运行 NET 4 0 应用程序是否有任何性能损失 我发现哪个应用程序启动速度较慢 但 在使用时没有注意到任何变慢 但不确定 当通过网络运行可执行文件时 Windows 不会在应用程序启动时通过网络传输整个应用程序 这样做是为
  • Visual Studio '17 未在参考管理器中显示程序集

    我遇到的问题是 我似乎无法弄清楚如何添加对某些解决方案的引用 在我从 Visual Studio 17 开始的大多数解决方案中 我在解决方案资源管理器中看到 引用 但例如对于 asp net core web api 我得到 依赖项 每当解
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 如何从 Go 上的请求正文中获取 JSON

    我是 Go 的新手 但到目前为止我非常喜欢它 我有一个问题我无法弄清楚 我正在将 API 从 Node 迁移到 Go 并且有一个日志 我必须在其中捕获 POST 的正文AS IT IS并将其保存到jsonb在 Postgresql 数据库中
  • Delphi 中嵌入 DB 的全文搜索

    我们正在创建一个开源推特客户端并正在寻找一个嵌入式数据库尽可能最小的占地面积与 Delphi 配合使用并且非常适合全文搜索 我知道这不太适合小足迹 理想情况下 它也应该是免费或开源的 我知道这要求很高 我倾向于SQLite 但我以前没有使用
  • 自定义键盘快捷键

    I want my app to support keyboard shortcuts Many devices such as Asus Transformer have external keyboard which has Ctrl
  • 如何在一张图中绘制多个季节性分解图?

    我正在使用以下提供的季节性分解来分解多个时间序列statsmodels 这是代码和相应的输出 def seasonal decompose item index tmp df2 loc df2 item id copy item ids i
  • 具有多个子句的命名函数的 Elixir 默认参数

    我无法理解默认参数如何与命名函数中的多个子句交互 归根结底 为什么下面的代码片段有效 defmodule Lists do def sum total 0 do total def sum h t total do h sum t tota
  • 在哪里可以获得 UISearchBar 中使用的放大镜图标?

    我在用着UITextField as a UISearchBar替换并 窃取 原始的放大镜图标UISearchBar用这个疯狂的代码 UISearchBar originalSearchBar UISearchBar alloc init
  • 在闪亮的应用程序上安排任务[重复]

    这个问题在这里已经有答案了 我正在使用shiny开发一个应用程序 作为我项目的一部分 我需要每天从网站上抓取一些数据 是否可以使用 cron 或类似实用程序安排每 12 小时完成一项工作 我正在使用免费的闪亮服务器托管服务器 我真的不建议在
  • 使用 Internet Explorer 进行重定向后获取

    我有一个网页实现了发布 重定向 获取模式以避免在简单的 CRUD 应用程序中重复发布 这里预期的请求 响应序列是 浏览器通过以下方式发送数据POST 服务器修改数据库 响应状态302 Moved Temporarily and a Loca
  • 使用 Group By 进行多个运行总计

    我正在努力寻找一种好方法来运行带有 group by 的运行总计 或者类似的方法 下面基于游标的运行总计适用于完整的表 但我想扩展它以添加 客户端 维度 因此 我将在一张表中获得如下创建的运行总计 但对于每个公司 即公司 A 公司 B 公司
  • Zend Framework 布局中的图像

    我在这里有点迷失 解决方案可能潜伏在我的鼻子底下 但我无法得到 想到你们是否有人可以提供帮助 问题是这样的 我有 Zend Framework 标准文件布局 Project application controllers views lay
  • 是否可以使用 JavaScript 读取 Firefox、Safari 和 Chrome 中的剪贴板?

    我正在尝试使用 JavaScript 读取剪贴板的内容 通过 Internet Explorer 可以使用该功能 window clipboardData getData Text 在 Firefox Safari 和 Chrome 中是否
  • 类定义之外的部分模板特化

    我可以在类声明中使用部分模板专业化 template
  • 如何使用javascript检查文件是否被选择?

    在 php 中 这是检查文件是否被选择的方法 FILES item size gt 0 那么在 JavaScript 中呢 我需要知道 因为我有一个只有在选择文件时才起作用的函数 http www w3 org TR DOM Level 2
  • 从逗号分隔的字符串中删除重复项

    是否有更好 更快 的解决方案来从逗号分隔的字符串中删除重复项 public function d dep if strpos dep false nd explode dep oa array unique nd nx count oa g
  • 使用 JDBC 连接到 SQL Server LocalDB

    是否可以使用 JDBC 连接到 SQL Server LocalDB 看起来 截至 2011 年 12 月 这是不可能的 您知道解决方法或状态更改吗 对的 这是可能的 使用 jTDS 的 LocalDB 实例的连接字符串如下所示 jdbc
  • Braintree - paymentMethodNonce 未收到调用

    我已经为 Braintree 设置了 dropin UI 我可以很好地看到用户界面 在此之前 我创建了客户 我可以在 Braintree sandbox 上看到该客户 现在我想向客户添加付款方式 我正在尝试以下代码 但 paymentMet
  • 用于验证文件夹名称和文件名的正则表达式

    我想验证文件名 文件或文件夹的名称不应包含 您能否建议我在 preg match 中使用的正则表达式 Thanks 使用该方法会更有效strpbrk 功能 if strpbrk filename lt gt FALSE filename i
  • 拆分列表并从子列表中求和?

    我正在为我的 Haskell 课程寻找解决方案 我有一个数字列表 我需要为列表的每个部分返回 SUM 部分除以 0 我需要使用 FOLDL 函数 Example 初始列表 1 2 3 0 3 4 0 5 2 1 子列表 1 2 3 3 4
  • 为什么 CROSS JOIN 条件在“ON”子句中不起作用,而仅在 WHERE 子句中起作用?

    我想知道为什么条件交叉联接必须具有 WHERE 子句中指定的条件 以及为什么它在 ON 子句中不起作用 请参阅编译示例的链接 http rextester com IKY8693 业务上下文 我需要生成开始日期和结束日期之间的日期列表 以便
  • 如何为不接受取消令牌的异步函数设置超时?

    我的网络请求是由这段代码处理的 Response await Client SendAsync Message HttpCompletionOption ResponseHeadersRead CToken 在读取响应标头之后 内容读取完成