aliyun / aliyun-oss-csharp-sdk

Aliyun OSS SDK for C#
MIT License
383 stars 206 forks source link

BeginPutObject函数的文件流释放造成异步请求报错 #33

Open vla opened 6 years ago

vla commented 6 years ago
  public IAsyncResult BeginPutObject(string bucketName, string key, string fileToUpload, ObjectMetadata metadata,
            AsyncCallback callback, object state)
        {
            if (!File.Exists(fileToUpload) || Directory.Exists(fileToUpload))
                throw new ArgumentException(String.Format("Invalid file path {0}.", fileToUpload));

            metadata = metadata ?? new ObjectMetadata();
            SetContentTypeIfNull(key, fileToUpload, ref metadata);

            IAsyncResult result;
            //TODO 这里释放了content导致ServiceClientImpl报错
            using (Stream content = File.OpenRead(fileToUpload))
            {
                result = BeginPutObject(bucketName, key, content, metadata, callback, state);
            }
            return result;
        }

ServiceClientImpl报错位置

  if (async)
            {
                webRequest.BeginGetRequestStream(
                    (ar) =>
                    {
                        using (var requestStream = webRequest.EndGetRequestStream(ar))
                        {
                            //TODO data已被释放
                            IoUtils.WriteTo(data, requestStream, webRequest.ContentLength);
                        }
                        asyncCallback();
                    }, null);
            }
nishizhen commented 6 years ago

和我报的是一个吧? #32

vla commented 6 years ago

@nishizhen 不是,这个是他的BUG!这里处理太慢了,我自己fork了发布了一个到NUGET去用了

zousq19910623 commented 6 years ago

请教一下,怎么修复的。 我现在使用多线程去GetObjects也出现了报错 image