我想通过调用使用多线程调用webservice的函数来发送文件块。
以下是代码的简要说明:
int chunkSize = "whatever in byte";
byte[] fileBytes = ConvFileToByte("the pathe of the file");
int numberOfParts = (int)Math.Ceiling((decimal)fileSize / chunkSize);
for (int i; i< numberOfParts; i++)
{
//Get the offset.
//Get the bytes to send.
SendFile(ByteToSend, offset) // This call a method in a webservice.
}
在此功能中使用mutithreading的最佳方法是什么?
注意:但不要忘记,如果一个块无法发送,我应该再发送一次。
答案 0 :(得分:1)
如果您的网络服务可以安全地无序接收数据块,请考虑使用ThreadPool
类(请参阅此处的一个很好的示例:VB.Net Threading)。您将能够设置并行线程数等。
可以在上传单个块的函数内部重新发送。比如说,如果请求失败(没有得到服务器的“200”响应),你重新开始(必须计算你重试的次数,否则可以进行ifinite循环)。
答案 1 :(得分:1)
除非您在某种负载均衡下有多个Web服务实例,并且您的上传带宽高于每个服务主机的下载功能,否则如果您希望实现更高的上传速度,则多线程调用没有意义。
另一方面,如果您要上传的文件非常大并且您想限制用于缓冲文件的内存量,那么分块是有意义的。如果是这种情况并且您可以控制Web服务实现,则应考虑使用WCF chunking而不是编写自己的分块机制。