Check downloadEnded inside WaitToPosition

This commit is contained in:
Michael Bucari-Tovo 2022-06-20 23:13:34 -06:00
parent cfd2b7b7aa
commit 1ae767087f

View File

@ -261,7 +261,6 @@ namespace AaxDecrypter
catch (Exception ex) catch (Exception ex)
{ {
Serilog.Log.Error(ex, "An error was encountered while downloading {Uri}", Uri); Serilog.Log.Error(ex, "An error was encountered while downloading {Uri}", Uri);
IsCancelled = true;
} }
finally finally
{ {
@ -414,7 +413,7 @@ namespace AaxDecrypter
var toRead = Math.Min(count, Length - Position); var toRead = Math.Min(count, Length - Position);
WaitToPosition(Position + toRead); WaitToPosition(Position + toRead);
return IsCancelled ? 0 : _readFile.Read(buffer, offset, count); return _readFile.Read(buffer, offset, count);
} }
public override long Seek(long offset, SeekOrigin origin) public override long Seek(long offset, SeekOrigin origin)
@ -436,14 +435,18 @@ namespace AaxDecrypter
/// <param name="requiredPosition">The minimum required flished data length in <see cref="SaveFilePath"/>.</param> /// <param name="requiredPosition">The minimum required flished data length in <see cref="SaveFilePath"/>.</param>
private void WaitToPosition(long requiredPosition) private void WaitToPosition(long requiredPosition)
{ {
while (requiredPosition > WritePosition && !IsCancelled && hasBegunDownloading && !downloadedPiece.WaitOne(1000)) ; while (requiredPosition > WritePosition
&& hasBegunDownloading
&& !IsCancelled
&& !downloadEnded.WaitOne(0)
&& !downloadedPiece.WaitOne(100)) ;
} }
public override void Close() public override void Close()
{ {
IsCancelled = true; IsCancelled = true;
while (downloadEnded is not null && !downloadEnded.WaitOne(1000)) ; while (downloadEnded is not null && !downloadEnded.WaitOne(100)) ;
_readFile.Close(); _readFile.Close();
_writeFile.Close(); _writeFile.Close();