我们公司有一个网络服务,我想通过我自己的服务发送 XML 文件(存储在我的驱动器上)HTTPWebRequest
C# 中的客户端。这已经有效了。 Web服务同时支持5个同步请求(一旦服务器上的处理完成,我就会从Web服务获得响应)。每个请求的处理时间大约需要 5 分钟。
抛出太多请求 (> 5) 会导致我的客户端超时。此外,这可能会导致服务器端出现错误和数据不一致。不能在服务器端进行更改(来自不同的供应商)。
现在,我的Webrequest
客户端将发送 XML 并等待响应result.AsyncWaitHandle.WaitOne();
然而,这样一来,尽管 Web 服务支持 5 个请求,但一次只能处理一个请求。我尝试使用Backgroundworker
and Threadpool
但他们同时创建了太多的请求,这使得它们对我来说毫无用处。有什么建议,如何解决这个问题?创建我自己的Threadpool
正好有 5 个线程?有什么建议,如何实施?
最简单的方法是创建 5 个线程(顺便说一句:这是一个奇数!),它们使用来自BlockingCollection
.
就像是:
var bc = new BlockingCollection<string>();
for ( int i = 0 ; i < 5 ; i++ )
{
new Thread( () =>
{
foreach ( var xml in bc.GetConsumingEnumerable() )
{
// do work
}
}
).Start();
}
bc.Add( xml_1 );
bc.Add( xml_2 );
...
bc.CompleteAdding(); // threads will end when queue is exhausted
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)