VB.NET谷歌云盘上传程序调用Google Drive API抛出TaskCanceledException问题
问题根因及修复方案
1. 谷歌API默认超时阈值不足
Google.Apis官方客户端的默认HttpClient超时时间仅为100秒,若你上传的文件较大、夜间跨国链路存在波动,很容易触发超时自动取消任务。你代码中注释掉的超时配置就是核心修复点,放开并调整为和你的1小时整体超时逻辑对齐即可:
UploadRequest.Service.HttpClient.Timeout = TimeSpan.FromSeconds(3600) UploadRequest.ContentStream.WriteTimeout = 3600000 ' 单位毫秒,对应1小时
2. 分块上传阈值配置不合理
Google Drive的InsertMediaUpload默认分块大小为10MB,大文件单分块传输时间超过超时阈值也会触发任务取消,可手动调小分块大小适配不稳定链路:
' 调整分块为2MB,降低单次传输超时概率 UploadRequest.ChunkSize = FilesResource.InsertMediaUpload.MinimumChunkSize * 2
3. 异常处理逻辑优化
你当前的Catch块统一捕获所有异常,没有针对TaskCanceledException做单独的重试逻辑优化,建议单独判断异常类型,触发即时重试降低等待成本:
Catch ex As AggregateException For Each innerEx In ex.InnerExceptions If TypeOf innerEx Is TaskCanceledException Then logger.Debug($"上传超时取消,准备重试,文件名:{nome}") ' 此处可添加你的自定义重试逻辑,注意控制重试次数避免死循环 End If Next AnnulloCaricamento(nome, dataultimaModifica, pathDb) Catch ex As Exception AnnulloCaricamento(nome, dataultimaModifica, pathDb)
4. 设备网络链路排查
部分设备如果使用家用宽带,运营商可能会在夜间低流量时段自动断开长连接、或者对境外端口做限流,可在上传前先调用一次谷歌Drive的轻量查询接口做连通性校验,确认链路正常后再启动上传。
内容的提问来源于stack exchange,提问作者Simone Barattino
相关产品推荐
相关产品推荐

