我的VSTO Addin需要将大文件上传到我们的服务器,所以为了做到这一点,我一直在使用HttpClient.PostAsync
。
会发生的是,对于相当大的文件(> 100Mb,但我们需要处理高达5Gb的文件),我得到“Microsoft Office Excel正在等待另一个进程来完成OLE操作”错误。
当它无法及时完成时会触发TaskCanceledException
。
我已经尝试了Application.DisplayAlerts = false
解决方案,但是虽然它没有触发模态警告我们,但请求仍然会被取消。
以下是发送请求的代码:
using (HttpClient client = HttpClientFactory.Create(progressHandler))
using (MultipartFormDataContent formData = new MultipartFormDataContent())
{
formData.Add(fileStreamContent, "file");
HttpResponseMessage response = await client.PostAsync(url, formData);
if (response == null || response.StatusCode != HttpStatusCode.OK)
return null;
return response.Content.ReadAsStringAsync().Result;
}
我的最后一招是通过以块的形式读取并发送文件来手动流式传输文件。然而,这种方法违背了使用HttpClient流式传输文件的目的。
我已经搜索了增加或消除延迟的方法,在此之前任务被取消但无济于事。