in sdk/Common/ResumableUploadManager.cs [252:300]
private void StartPreRead(object state)
{
PreReadThreadParam preReadThreadParam = state as PreReadThreadParam;
if (preReadThreadParam == null)
{
throw new ClientException("Internal error: the state must be type of PreReadThreadParam");
}
int nextPart = 0;
try
{
while (!preReadThreadParam.RequestStopPreRead && nextPart < preReadThreadParam.ResumableContext.PartContextList.Count)
{
MemoryStream buffer = preReadThreadParam.TakeBuffer();
if (buffer == null)
{
continue;
}
UploadTask param = new UploadTask();
param.UploadFileStream = preReadThreadParam.Fs;
param.InputStream = buffer;
param.ResumableUploadContext = preReadThreadParam.ResumableContext;
param.ResumableUploadPartContext = preReadThreadParam.ResumableContext.PartContextList[nextPart++];
param.UploadProgressCallback = _uploadProgressCallback;
param.ProgressUpdateInterval = _conf.ProgressUpdateInterval;
param.Finished = new ManualResetEvent(false);
int readCount = 0;
while (readCount != param.ResumableUploadPartContext.Length)
{
int count = preReadThreadParam.Fs.Read(buffer.GetBuffer(), readCount, (int)param.ResumableUploadPartContext.Length - readCount);
if (count == 0)
{
throw new System.IO.IOException(string.Format("Unable to read data with expected size. Expected size:{0}, actual read size: {1}", param.ResumableUploadPartContext.Length, readCount));
}
readCount += count;
}
param.InputStream.SetLength(readCount);
preReadThreadParam.CreateTask(param);
}
}
catch(Exception e)
{
preReadThreadParam.PreReadError = e;
}
}