我们公司有一个 Web 服务,我想通过我自己的 HTTPWebRequest
客户端在 C# 中发送 XML 文件(存储在我的驱动器上)。这已经有效。 Web 服务同时支持 5 个同步请求(一旦服务器上的处理完成,我就会从 Web 服务获得响应)。每个请求的处理大约需要 5 分钟。
抛出太多请求(> 5)会导致我的客户端超时。此外,这可能会导致服务器端错误和数据不连贯。在服务器端进行更改不是一种选择(来自不同的供应商)。
现在,我的 Webrequest
客户端将发送 XML 并使用 result.AsyncWaitHandle.WaitOne();
等待响应
但是,尽管 Web 服务支持 5 个请求,但这样一次只能处理一个请求。我尝试使用 Backgroundworker
和 Threadpool
但它们创建了太多请求同时请求,这使它们对我毫无用处。任何建议,如何解决这个问题?创建我自己的 Threadpool
恰好有 5 个线程?有什么建议,如何实现?
最佳答案
最简单的方法是创建 5 个线程(另外:这是一个奇数!),它们使用 BlockingCollection
中的 xml 文件。
类似于:
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
关于c# - 同时运行 x 个 Web 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878603/