@@ -48,11 +48,16 @@ Public Class Compactor : Implements IDisposable, ICompressor
4848
4949 Dim paraOptions As New ParallelOptions With {.MaxDegreeOfParallelism = MaxParallelism}
5050
51- Await Parallel.ForEachAsync(workingFiles, paraOptions,
52- Function (file, _ctx) As ValueTask
53- If _ctx.IsCancellationRequested Then Return ValueTask.FromCanceled(_ctx)
54- Return New ValueTask(PauseAndProcessFile(file, totalFilesSize, cancellationTokenSource.Token, progressMonitor))
55- End Function ).ConfigureAwait( False )
51+ Try
52+ Await Parallel.ForEachAsync(workingFiles, paraOptions,
53+ Function (file, _ctx) As ValueTask
54+ _ctx.ThrowIfCancellationRequested()
55+ Return New ValueTask(PauseAndProcessFile(file, totalFilesSize, cancellationTokenSource.Token, progressMonitor))
56+ End Function ).ConfigureAwait( False )
57+ Catch ex As OperationCanceledException
58+ ' Swallow cancellation, return false
59+ Return False
60+ End Try
5661
5762 Return Not cancellationTokenSource.IsCancellationRequested
5863
@@ -64,16 +69,17 @@ Public Class Compactor : Implements IDisposable, ICompressor
6469 Await pauseSemaphore.WaitAsync(_ctx).ConfigureAwait( False )
6570 pauseSemaphore.Release()
6671 Catch ex As OperationCanceledException
72+ Throw
6773 Return
6874 End Try
6975
70- If _ctx.IsCancellationRequested Then Return
76+ _ctx.ThrowIfCancellationRequested()
7177
7278 Dim res = WOFCompressFile(details.FileName)
7379 Interlocked.Add(totalProcessedBytes, details.UncompressedSize)
74-
7580 progressMonitor?.Report( New CompressionProgress(totalProcessedBytes / totalFilesSize * 100 , details.FileName))
7681
82+
7783 End Function
7884
7985
0 commit comments