当尝试使用.net API 1.5.0.222上传(大)“gzipped”(30MB)压缩csv文件(90MB)时,100秒后总是出错
[System.Threading.Tasks.TaskCanceledException] {System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Microsoft.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Google.Apis.Upload.ResumableUpload`1.<Upload>d__0.MoveNext() in c:\code.google.com\google-api-dotnet-client\default_3\Tools\Google.Apis.Release\bin\Debug\output\default\Src\GoogleApis\Apis\[Media]\Upload\ResumableUpload.cs:line 362} System.Threading.Tasks.TaskCanceledException
我在这里找到了与HTTP POST 100秒超时相关的内容:
Can't set HttpWebRequest timeout higher than 100 seconds when doing a POST?
但它仅与HttpWebRequest类相关(不特别与Bigquery .NET API有关)。
我没有找到如何使用bigquery(.net)API设置此超时,也没有找到如何访问底层(我猜)HttpWebRequest实例。
有没有办法设置此超时?
或者将本地csv文件上传到bigquery以避免超时的特定方法?
答案 0 :(得分:4)
这很容易,问这个问题几乎是一种耻辱...... 项目中缺少参考,并且不允许使用允许这样做的属性。 无论如何..解决方案是(暂停10分钟):
BigqueryService bq = someMethodToGetIt(...);
bq.HttpClient.Timeout = new TimeSpan(0, 10, 0);
答案 1 :(得分:0)
我不熟悉您正在使用的.NET库,但由于您正在进行可恢复上传,您是否可以将上传内容分成每个不到100秒的内容?
答案 2 :(得分:0)
我认为延长超时是不错的做法。
我是怎么做到的。 Google API上传是resumableUpload - 这意味着您支持将文件切割为Chunks。 (并在出现问题时恢复)
这就是我做到的:
JobInfo = m_bigQueryService.Jobs.Insert(jobBody, sProject, file, "application/octet-stream");
// Chunk size in MB
JobInfo.ChunkSize = 1 * Google.Apis.Upload.ResumableUpload<Job>.MinimumChunkSize; // currently 250kb
int t = 1;
JobInfo.ProgressChanged += progress =>
{
// You can put what ever you like here - triggered after each chunk is uploaded
};
uploadProgress = JobInfo.Upload(); // Sync upload
if (uploadProgress.Status != UploadStatus.Completed)
{
// Do something
}
你可以在这里阅读更多内容: https://developers.google.com/drive/manage-uploads#resumable