使用多线程以块的形式发送文件

时间:2010-01-18 09:12:40

标签: c# .net multithreading

我想通过调用使用多线程调用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的最佳方法是什么?

注意:但不要忘记,如果一个块无法发送,我应该再发送一次。

2 个答案:

答案 0 :(得分:1)

如果您的网络服务可以安全地无序接收数据块,请考虑使用ThreadPool类(请参阅此处的一个很好的示例:VB.Net Threading)。您将能够设置并行线程数等。

可以在上传单个块的函数内部重新发送。比如说,如果请求失败(没有得到服务器的“200”响应),你重新开始(必须计算你重试的次数,否则可以进行ifinite循环)。

答案 1 :(得分:1)

除非您在某种负载均衡下有多个Web服务实例,并且您的上传带宽高于每个服务主机的下载功能,否则如果您希望实现更高的上传速度,则多线程调用没有意义。

另一方面,如果您要上传的文件非常大并且您想限制用于缓冲文件的内存量,那么分块是有意义的。如果是这种情况并且您可以控制Web服务实现,则应考虑使用WCF chunking而不是编写自己的分块机制。