Applies http-timeout to download stream
This commit is contained in:
parent
e6a5838b05
commit
8fe0bd6307
|
@ -264,10 +264,27 @@ namespace CodexPlugin
|
||||||
private void DownloadToFile(string contentId, TrackedFile file, Action<Failure> onFailure)
|
private void DownloadToFile(string contentId, TrackedFile file, Action<Failure> onFailure)
|
||||||
{
|
{
|
||||||
using var fileStream = File.OpenWrite(file.Filename);
|
using var fileStream = File.OpenWrite(file.Filename);
|
||||||
|
var timeout = tools.TimeSet.HttpCallTimeout();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var downloadStream = CodexAccess.DownloadFile(contentId, onFailure);
|
// Type of stream generated by openAPI client does not support timeouts.
|
||||||
downloadStream.CopyTo(fileStream);
|
var start = DateTime.UtcNow;
|
||||||
|
var cts = new CancellationTokenSource();
|
||||||
|
var downloadTask = Task.Run(() =>
|
||||||
|
{
|
||||||
|
using var downloadStream = CodexAccess.DownloadFile(contentId, onFailure);
|
||||||
|
downloadStream.CopyTo(fileStream);
|
||||||
|
}, cts.Token);
|
||||||
|
|
||||||
|
while (DateTime.UtcNow - start < timeout)
|
||||||
|
{
|
||||||
|
if (downloadTask.IsFaulted) throw downloadTask.Exception;
|
||||||
|
if (downloadTask.IsCompletedSuccessfully) return;
|
||||||
|
Thread.Sleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
cts.Cancel();
|
||||||
|
throw new TimeoutException($"Download of '{contentId}' timed out after {Time.FormatDuration(timeout)}");
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue