【发布时间】:2015-04-21 03:31:22
【问题描述】:
目前我发现的所有解决方案都是基于 WaitOne: How to configure socket connect timeout 或spawning a worker thread
对我来说,用WaitOne 阻塞线程违背了异步方法的目的。生成另一个线程也好不到哪里去(因为异步模型力求使用尽可能少的线程)。
还有其他解决方案可以让我在不阻塞当前线程或产生另一个线程的情况下中止连接尝试吗?
我正在开发一个由外部代码使用的库,它不知道我的库内部发生了什么(代码只是调用我的 ConnectAsync 方法,其余的由我完成,包括 TcpClient.ConnectAsync 等等)。外部代码可以是任何东西(Web 应用程序、桌面应用程序、Windows 服务等)。理想情况下,解决方案不应该要求外部代码做任何事情来中止操作,而不仅仅是设置我的类的 .Timeout 属性。但是,如果这是在实现自定义连接超时时避免阻塞或工作线程的唯一方法,我会很高兴看到我有哪些选项(就 async/await 模型而言)。
【问题讨论】:
-
我认为我的问题 (Async network operations never finish) 是重复的。但我不想欺骗它。
标签: c# .net sockets task-parallel-library async-await