5
|
Kevin Hakanson · 技术社区 · 15 年前 |
1
1
我更喜欢手动执行这类操作,而不是依赖异步Web请求或线程池的自动调整大小(默认为25个线程)。当然,这些都是很好的解决问题的方法,但是我认为下面的代码更易读一些(在下面的示例中,“链接”将包含处理前的链接列表…):
如果只想管理线程池的大小(如果使用的是thread pool.queueUserWorkItem()),则可以使用thread pool.setMaxThreads=2。 当然,如果要使用Microsoft认可的异步方法,请查看以下示例: http://msdn.microsoft.com/en-us/library/86wf6409.aspx . 只需确保清理每个响应(通过“使用”块或关闭响应对象)! 希望能有所帮助, 诺亚 |
2
1
答案之一
Multithreading WebRequests, a good and stable approach? : CSharp
使用A
然而, WaitHandles - Auto/ManualResetEvent and Mutex 提到ManualResetEvent“比使用各种监视方法(如Wait、Pulse和Pulseall)慢得多。
我最终把我的代码建立在这个Noah Blumenthal的博客上:
Run generic tasks async (fluent-ly)
.我做了两个更改:实现
|
3
0
我建议您创建一个执行httpwebrequest的worker类,并在它自己的线程中为每个连接启动它。您可以加入线程,等待它们都完成,或者传递回调方法。无论哪种情况,您都需要考虑连接失败、超时和其他异常。我更喜欢使用一个回调来返回连接结果和线程的managedThreadID,这是我用来跟踪线程的。辅助类应捕获所有异常,以便在调用类中处理它们。 本文提供了一些有关当超过最大连接数时的洞察和修复: http://support.microsoft.com/kb/821268 . |
4
-2
除非你在做一些花哨的事情,否则线程池的大小是固定的,通常足够大以满足你的需要。在您的特定情况下,如果您的WebService负载很重,并且每个调用者已经为自己的回调启动了2个TP线程,那么您可能会使用异步调用遇到资源约束问题。 也许最简单的实现方法是 二 不同的回调函数,其中一个用于service1,另一个用于service2,在每个completionEvents中将某些触发器变量设置为“true”,然后在主线程中等待同时设置这两个触发器变量。您可以使用ReseteEvents来完成这项工作,但是如果您的服务器将处于加载状态,您可能希望避免这种情况。 过程的伪代码可能是:
这有点困难,因为我不知道你打电话的确切性质,但它应该工作得相当好。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |