支持异步操作并遵守超时的.NET TcpClient/NetworkStream 实现

2024-04-15

根据问题数量、论坛帖子等,BCL 中的 TcpClient/NetworkStream 实现似乎缺乏对取消 IO 操作的适当支持。随着 .NET 4.5 中添加异步方法,这种取消(或适当的超时支持)的缺乏使事情变得更加令人沮丧,因为在执行 IO 时取消拒绝监视其 CancellationToken 的任务变得更加复杂(几乎不可能) 。

我见过许多实现,它们会启动额外的线程来监视网络操作,并在出现问题时关闭底层流。在我们试图通过使用异步操作来节省这些资源的世界中​​,这感觉非常肮脏。

任何人都可以为我指明处理有效取消/超时网络 IO 操作的指导方向,或者指向实际有效的强大的第 3 方实现吗?


取消 IO 并不是一件小事。从 Vista 开始,我们有了 CancelIO 功能,但这是一个相当新的东西,驱动程序需要支持它。

实际上,您能做的最好的事情就是关闭套接字以取消一切。或者,您可以围绕任务实现一个包装函数,以便在设置 CancellationToken 时立即完成。 IO 操作仍将继续,但其结果将被丢弃。

以下是有关该问题的彻底讨论:http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187 http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187

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

支持异步操作并遵守超时的.NET TcpClient/NetworkStream 实现 的相关文章

  • .NET IExtenderProvider (C#)

    我正在尝试延长TextBox ComboBox and Panel控制使用IExtenderProvider但我无法让它正常工作 我开始相信我还没有完全理解这个概念 有人知道网络上有什么好的资源 带有示例 吗 IExtenderProvid
  • Linq 在 .Substring() 上抛出异常

    我遇到了一种情况 我需要让 LINQ to Entities 查询根据字符串的长度返回一个子字符串 这是查询 var query from f in Context Files orderby f DateAdded descending
  • wcf json网络服务

    创建 JSON Web 服务的最佳方法是什么 我们还有另一个使用 Java 的团队 他们坚持使用 JSON 完成所有通信 我更喜欢使用 WCF 而不是任何第三方框架 我找到了这个博客 http www west wind com weblo
  • 如何在单个 Razor 视图中编辑多个模型

    我是 MVC3 的新手 我有多个模型 例如BussinessDetails ContactPerson ServiceArea Address以及更多型号 我有一个单一的视图页面 其中共享视图页面如Contacts BusinessDeta
  • 为什么 .NET 异步等待文件复制比同步 File.Copy() 调用消耗更多 CPU?

    为什么下面的代码会产生 public static class Program public static void Main params string args var sourceFileName C Users ehoua Desk
  • asp.net net.mail - 在调试模式下将所有电子邮件路由到不同的电子邮件地址

    无论如何 有没有办法让所有电子邮件发送到不同的地址System Web HttpContext Current IsDebuggingEnabled是真的 或者我是否需要一个新的类来用于到处发送电子邮件 我会设置一个 SMTP 服务器 并让
  • 多个 Visual Studio 项目抱怨临时文件丢失,因此无法打开。错误代码 &H80070003

    我在终端服务器上运行 Visual Studio 2010 并且已经运行了一段时间 问题相对较少 今天早上 我启动了我的电脑 在英国的长周末期间 似乎出现了以下问题 我有很多项目 但不是我的所有项目 也不是给定解决方案中的所有项目 抱怨无法
  • 如何在.NET 中编写安全/正确的多线程代码?

    今天我必须修复一些使用线程的旧 VB NET 1 0 代码 问题在于从工作线程而不是 UI 线程更新 UI 元素 我花了一些时间才发现可以使用 InvokeRequired 断言来查找问题 除了上面提到的并发修改问题之外 还可能遇到死锁 竞
  • FOREACH返回的对象顺序稳定吗?

    是否可以安全地假设对同一集合的两次迭代将以相同的顺序返回对象 显然 假设集合没有被更改 这取决于集合类型 对于大多数集合来说 答案是 是 然而 这并不能得到保证 集合类型的文档应该指定它是否这样做 但正如大多数人所做的那样 该细节通常被忽视
  • 发生错误。", ExceptionMessage: "提供的 'HttpContent' 实例无效

    尝试将文件添加到 http 休息调用时出现此错误 responseJson 消息 发生错误 ExceptionMessage 提供了无效的 HttpContent 实例 它确实 正在使用 多部分 参数名称 内容 异常类型 System Ar
  • Parallel.For 和 Break() 误解?

    我正在研究 For 循环中的并行性中断 看完之后this http tipsandtricks runicsoft com CSharp ParallelClass html and this http reedcopsey com 201
  • 无论表单上的焦点控件如何,如何捕获 Keys.F1?

    我使用了 KeyDown 事件和一些简单的代码 例如if e KeyCode Keys F1 捕获在表单上按下 F1 但如果表单上有一些文本框 或者表单上有一些带有 Dock Fill 的电子表格 则上面的代码将毫无用处并且不执行任何操作
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul
  • 何时使用 IComparable 与何时使用IComparer

    我正在尝试找出我需要实现哪些接口 他们本质上都做同样的事情 我什么时候会使用其中一种而不是另一种 好吧 他们不是quite与IComparer
  • 如何暂时暂停实时数据图表的绘制更新

    我想要 暂停 图表的系列更新来完成一些工作 就像我有一个按钮 当我单击它时 它将暂停图表更新 然后当我单击恢复按钮时 它将更新系列中的所有暂停点 我知道关于 chart1 Series SuspendUpdates 但它似乎不适合我 我使用
  • web.config 转换为

    我有针对多个环境的 web config 转换 在配置文件中 我有一个 applicationSettings 部分 其中包含多个设置和值对 我尝试过根据用于匹配名称的语法并更改连接字符串以匹配设置并更改值 但转换失败 这是可能吗 所以我的
  • TCPClient未收到数据

    我想使用 StreamReader 和 StreamWriter 通过 TCPClient NetworkStream 接收和发送数据 代码如下所示 客户端代码 using TcpClient client new TcpClient IP
  • 在服务器桌面会话上捕获屏幕

    我开发了一个 GUI 测试框架 可以按计划对我们公司网站进行集成测试 当出现问题时 它会截取桌面等内容 它在专用 Windows Server 2008 上的登录用户上运行 无人值守 问题是在我已断开远程桌面会话连接的桌面上截取屏幕截图 我
  • 如何在 WPF 应用程序中实现气球消息

    我们想使用气球消息 如UX Guide http msdn microsoft com en us library aa511451 aspx来自微软 我发现一些示例使用 Windows 窗体中的本机代码 但本机代码需要组件的句柄 这对于
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet

随机推荐

  • 如何跟踪 celery 中的重试次数

    在 Celery 中 如何跟踪当前的重试 我知道我可以做这样的事情 app task bind True default retry delay 900 max retries 5 def send email self sender No
  • 活动开启两次

    我有一个使用的应用程序城市飞艇 http urbanairship com 用于推送通知 当通知到达并且用户单击它时 我的应用程序中的活动 A 应该打开并执行某些操作 我已经安装了BroadcastReceiver如图所示在文档中 http
  • 在 C++ 中将数组转换为集合

    有没有更简单的方法使用 C 将数组转换为集合而不是循环遍历其元素 最好使用标准模板库 对于所有标准库容器类型 请使用构造函数 http en cppreference com w cpp container set set std set
  • ASP.NET Owin OAuth (Google / Facebook) 正在重定向到默认的 login.aspx,而不是远程登录页面

    我正在使用 Owin 库 包括 Google 和 Facebook 设置 OAuth 从表面上看 Owin 启动课程注册得很好 我发现我没有被重定向到 Facebook 或 Google 的相应登录页面 而是被重定向到默认的 login a
  • 从 SDK 上的“getLastKnownLocation”获取 null

    我有一个与位置 API 相关的问题 我尝试了以下代码 LocationManager lm LocationManager getSystemService Context LOCATION SERVICE Location loc get
  • 避免 D3.js 中子节点重叠

    我正在使用 D3 js 构建一个树结构 显示 Facebook 用户和他 她的 Facebook 好友 根节点是用户 子节点是好友 我的 UI 中有固定宽度 问题是子节点将相互重叠 var nodes tree nodes root rev
  • 使用 Resharper 7 测试运行程序进行 Jasmine 测试的堆栈跟踪

    如何让 Resharper 7 测试运行程序显示 Jasmine 测试的堆栈跟踪 我的设置是 Resharper 7 在 Jasmine 中构建 测试运行器和 PhantomJs 执行任何失败的测试时 错误消息始终以以下内容结尾 Excep
  • jquery-ui - 取消拖动转义键

    我有一个可拖动的列表divs 和一个可放置区域 在 chrome FF 和 IE9 中 鼠标拖放功能运行良好 我想添加键盘交互 拖拽div使用按键时应恢复到列表esc钥匙 所以首先我这样做了 document keyup function
  • ng-grid 行模板中的日期格式

    我创建了一个具有以下列定义的 ng grid columns field CompanyPkid visible false field CompanyName visible false field StartDate visible f
  • 如何让用户能够使用我的应用程序播放视频?

    昨晚刚刚花了几个小时为 Honeycomb 开发了一个非常漂亮的视频播放器 现在我当然希望人们能够使用它 如何让我的应用程序监听 接收 视频播放广播 我猜这与manifest xml文件 但我无法在 Android 开发者网站上找到任何有关
  • 然后 Groupby 检查行匹配并计算该值的并发实例数

    我有这个数据框 car color years max years 0 audi black 1 7 1 audi blue 2 7 2 audi purple 4 7 3 audi black 6 7 4 bmw blue 1 5 5 b
  • 为什么 CAS(原子)操作比同步或易失性操作更快

    据我了解 synchronized关键字将本地线程缓存与主内存同步 volatile 关键字基本上总是在每次访问时从主内存中读取变量 当然 访问主内存比本地线程缓存要昂贵得多 因此这些操作的成本很高 然而 CAS 操作使用低级硬件操作 但仍
  • 有条件的 Mercurial 忽略文件

    我在 Mercurial 中有一个文件 我希望开发机器提取该文件 但我希望部署服务器不提取该文件 它具有开发机器没有的特殊模块 这是可能的 还是我应该有一个自定义的推送到服务器解决方案 而不是仅仅进行 hg pull 执行此操作的典型方法是
  • H2O R api:从网格搜索中检索最佳模型

    我正在使用h2oR 中的包 v 3 6 0 并且我构建了一个网格搜索模型 现在 我正在尝试访问最小化验证集上的 MSE 的模型 在Python中sklearn 这在使用时很容易实现RandomizedSearchCV Pseudo code
  • 如何将 Windows 桌面应用程序转换为 Mac 桌面应用程序?

    我需要将 C NET Windows 桌面应用程序转换为 Mac 我读过有关 Qt REAL Studio LiveCode RunRev wxWidgets 和 Mono 的跨平台方面的内容 www mono project com 和h
  • 如何使用 Maven 在构建时正确增强类? OpenJPA

    我在尝试着enhance 实体 类 所以我不会得到这个异常 Exception in thread main
  • CGImageRelease:[不是类型发布]:发送到已释放实例的消息

    我在代码 CGImageRelease imageToSave 的最后一行收到此错误 不是类型发布 消息发送到已释放的实例 请解释原因以及我需要使用什么来修复它 我正在使用 ARC 但我认为这不适用于 CG 对象 在测试代 码是否有效后 我
  • 地理编码器可使用两个地址

    带有 Geocoder gem 的 Rails 4 1 3 应用程序在模型上具有以下属性 t decimal origin lon precision gt 15 scale gt 10 t decimal origin lat preci
  • C# Ghostscript 包装器

    有没有人遇到过 C 中 GhostScript 的一个很好的包装器 我的具体用途是把postscript转成pdf Matthew Ephraim 创建了一个非常简单的 C 包装器 名为 GhostScriptSharp 它使用 P Inv
  • 支持异步操作并遵守超时的.NET TcpClient/NetworkStream 实现

    根据问题数量 论坛帖子等 BCL 中的 TcpClient NetworkStream 实现似乎缺乏对取消 IO 操作的适当支持 随着 NET 4 5 中添加异步方法 这种取消 或适当的超时支持 的缺乏使事情变得更加令人沮丧 因为在执行 I