C#:启动多个连接时异步委托与 ThreadPool.QueueUserWorkItem
我必须发送许多 Web 服务调用来删除 Amazon SDB 中的一堆记录(不幸的是,目前一次只能删除一个行)。
我正在使用 Amazon 的 SDB c# 库,它不使用异步 WebRequests。
目前,我使用 ThreadPool.QueueUserWorkItem 对一堆调用进行排队(我配置了我的连接管理 maxconnection 以允许一堆连接) 这很有效......当请求发出时,它会阻塞并发出另一个请求。
这是实现这一目标的错误方法吗? 我应该使用异步委托并执行 BeginInvoke 和 EndInvoke 吗?
I have to send many web service calls out to delete a bunch of records in Amazon SDB (unfortunately, rows can only be deleted one at at time currently).
I am using Amazon's SDB c# library which does not use async WebRequests.
Currently I use ThreadPool.QueueUserWorkItem to queue up a bunch of calls (I configured my connectionManagement maxconnection to allow for a bunch of connections)
this works well..as the request is sent out, it blocks and another request is made.
Is this the wrong way to achieve this goal? Should I be using async delegates and doing BeginInvoke and EndInvoke?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您只需要对一些作业进行排队(不直接返回值),请使用 ThreadPool.QueueUserWorkItem 。 速度更快了。 其他问题(以及一些那里有很棒的博客文章。)
If you just need to queue up some jobs (that don't return values directly) go with
ThreadPool.QueueUserWorkItem
. It's faster. The difference is covered in other questions (and some great blog entries out there.)真正的异步需要放弃 Amazon 库并使用 BeginGetRequestStream/BeginGetResponse (我推荐)推出自己的库。 如果您坚持使用同步 WebRequests,请使用 QueueUserWorkItem。
Going trully async would require to abandon the Amazon library and roll your own, using BeginGetRequestStream/BeginGetResponse (which I would recommend). If you stick with the sync WebRequests, then use QueueUserWorkItem.