通过超时取消 C# 4.5 TcpClient ReadAsync

2023-11-27

通过超时取消 TcpClient ReadAsync 操作并捕获 .NET 4.5 中的此超时事件的正确方法是什么?

TcpClient.ReadTimeout 似乎适用于同步只读。

UPDATE:
尝试应用此处描述的方法取消异步操作

var buffer = new byte[4096];
CancellationTokenSource cts = new CancellationTokenSource(5000);
int amountRead = await tcpClientStream.ReadAsync(buffer, 0, 4096, cts.Token);

但它永远不会因超时而取消。有什么问题吗?


所以我知道那是很久以前的事了 但谷歌仍然把我带到这里 我看到没有人标记为答案

对我来说,我这样解决 我进行了扩展以添加需要额外超时的方法 ReadAsync

public static async Task<int> ReadAsync(this NetworkStream stream, byte[] buffer, int offset, int count, int TimeOut)
{
    var ReciveCount = 0;
    var receiveTask = Task.Run(async () => { ReciveCount = await stream.ReadAsync(buffer, offset, count); });
    var isReceived = await Task.WhenAny(receiveTask, Task.Delay(TimeOut)) == receiveTask;
    if (!isReceived) return -1;
    return ReciveCount;
}

所以如果它返回-1则意味着读取超时

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

通过超时取消 C# 4.5 TcpClient ReadAsync 的相关文章

随机推荐

  • 如何将 Python 站点包文件夹(未包含在内)添加到 PyInstaller 规范文件中?

    我在使用 PyInstaller 时遇到了包含 python 包的问题 特别是docxcompose 这是一个需要在 PyInstaller 目录中导入其 site package 文件夹的包 我已经用 pip 安装了 docxcompos
  • iPhone 打开 DATA:Safari 中的 URL

    我有一个数据 URL 请参阅 http en wikipedia org wiki Data URI scheme 作为 NSString 我想在 Safari 中打开它 你将如何完成这个 我尝试过 openURL 例子 data text
  • 哪些浏览器支持多行字符串?

    哪些浏览器支持多行字符串 foo bar 和往常一样 我主要怀疑 IE 不支持它 哪个 IE 版本最先支持它 所有当前版本的主要浏览器都接受多行字符串 注意 该技术显然不存在于 符合浏览器标准 然而 当 在主要浏览器的所有当前版本上进行了测
  • 我们能否通过接受(或忽略)新功能来使 ML 模型(pickle 文件)更加健壮?

    我训练了一个 ML 模型 并将其存储到 Pickle 文件中 在我的新脚本中 我正在阅读新的 现实世界数据 我想对其进行预测 然而 我正在挣扎 我有一列 包含字符串值 例如 Sex Male Female This is just as e
  • 仅 CSS 工具提示,带有箭头和边框

    Styles Tooltip position absolute z index 999 width 200px height 57px padding 20px font family Comic Sans MS cursive font
  • ThreadPoolExecutor 中的死锁

    遇到一个情况时ThreadPoolExecutor停在execute Runnable 功能同时所有ThreadPool线程正在等待getTaskfunc workQueue 为空 有人有什么想法吗 The ThreadPoolExecut
  • angularjs 支持哪些版本的 Firefox?

    In the AngularJS 文档 他们说 Angular 支持 Webkit Firefox IE gt 8 但 Firefox 到底是哪些版本呢 我需要创建一个支持 Firefox 25 的应用程序 那可能吗 我知道这是一个旧线程
  • 如何在Vim中高效地交错多组线条?

    我正在尝试交错三组文本行 例如 以下文本 a a a b b b c c c 将被转化为 a b c a b c a b c 有没有有效的方法来做到这一点 在我内心深处的某个地方 vim文件我有一个 Interleave命令 附在下面 不带
  • 使用空格分隔符和最大长度分割字符串

    我想以类似的方式分割字符串 split 因此产生一个列表 但以更智能的方式 我希望它将其分割成最多 15 个字符的块 但不会分割中间的单词 因此 string A string with words splitting process ta
  • 如何在 BQ 命令行中设置 Bigquery 需要分区过滤器

    在 Big Query Web GUI 中创建新的空分区表架构时 您可以设置需要分区过滤器选项 使用 bq 命令行工具创建表时如何设置相同的选项 现在我的命令是 bq mk table time partitioning field eve
  • Bash 终端输出 - 突出显示包含某些文本的行

    当我在 bash 中得到输出时 我得到了标准的 2 色屏幕 默认情况下 如果某行包含一些关键文本输出 有什么方法可以突出显示该行吗 例如 如果它包含单词 FAIL 则该行颜色为红色 我读过这个https unix stackexchange
  • 如何索引 PDF 文件并搜索关键字?

    我有一堆 PDF 几百个 它们没有适当的结构 也没有特定的领域 他们所拥有的只是大量的文字 我正在尝试做的事情 对 PDF 建立索引并根据索引搜索一些关键字 我有兴趣查找该特定关键字是否在 PDF 文档中 如果是 我想要找到该关键字的行 如
  • 用 UI 对话框替换提示

    如何用简单的 UI 对话框替换此代码中的提示以实现相同的效果 使用提示时 IE 会发出安全警告 HTML
  • vh / % 单位和移动设备上的键盘

    我对像这样的单位有问题vh 对于高度 当有任何input处于活动状态时 移动设备上的键盘会更改元素高度 我正在寻找在键盘处于活动状态时将其更改为静态高度的解决方案 jsfiddle 在移动设备上打开 这个问题很简单 我们以前都经历过 幸运的
  • iPad 上捕获视图上下文的质量低

    我需要捕获特定的 UIView 但结果质量低下 如何解决此问题并提高质量 UIGraphicsBeginImageContext captureView bounds size captureView layer renderInConte
  • 在 C# 中使用 WMI 更改用户家长控制设置

    我对 WMI 和 COM 真的很陌生 我想更改用户帐户家长控制的一些参数和 唯一可用的 API 是 WMI 要使用的 WMI 提供程序类是 WpcUserSettings 我不明白如何修改每个用户的参数 我必须创建一个 每个用户都有此类的
  • 如何防止 WordPress 剥离摘录中的 HTML 标签

    我正在使用 wp trim words 修剪主页上的一些摘录 它工作正常 只是它从摘录中删除了 HTML 标签 我需要能够将摘录的某些部分加粗 使用 strong 按照说明进行操作here 我尝试删除 wp trim words 函数并使用
  • Laravel - 作业在一台服务器上调度,在另一台服务器上处理

    我正在研究 Laravel 应用程序的日志记录方面 amd 计划将数据发送到 SQS 以便稍后检索 但是 我想将作业从生产服务器分派到 AWS 队列 然后让队列在侦听队列的单独日志服务器上工作 我了解如何设置队列工作程序来监听队列 但是 L
  • Jetty:以编程方式停止会导致“1 个线程无法停止”

    我有一个嵌入式 Jetty 6 1 26 实例 我想通过 HTTP GET 发送到来关闭它 shutdown 所以我创建了一个JettyShutdownServlet Override protected void doGet HttpSe
  • 通过超时取消 C# 4.5 TcpClient ReadAsync

    通过超时取消 TcpClient ReadAsync 操作并捕获 NET 4 5 中的此超时事件的正确方法是什么 TcpClient ReadTimeout 似乎适用于同步只读 UPDATE 尝试应用此处描述的方法取消异步操作 var bu