diff --git a/Duplicati/Library/Main/Operation/RestoreHandler.cs b/Duplicati/Library/Main/Operation/RestoreHandler.cs index dc6fa5d41..a1cfd6816 100644 --- a/Duplicati/Library/Main/Operation/RestoreHandler.cs +++ b/Duplicati/Library/Main/Operation/RestoreHandler.cs @@ -332,47 +332,44 @@ namespace Duplicati.Library.Main.Operation CreateDirectoryStructure(database, m_options, m_result); database.SetResult(m_result); - using (new ChannelScope()) - { - // Create the channels between BlockManager and FileProcessor - var fileprocessor_requests = new Channel[m_options.RestoreFileProcessors].Select(_ => ChannelManager.CreateChannel(buffersize:Restore.Channels.BufferSize)).ToArray(); - var fileprocessor_responses = new Channel[m_options.RestoreFileProcessors].Select(_ => ChannelManager.CreateChannel(buffersize:Restore.Channels.BufferSize)).ToArray(); + // Create the channels between BlockManager and FileProcessor + var fileprocessor_requests = new Channel[m_options.RestoreFileProcessors].Select(_ => ChannelManager.CreateChannel(buffersize:Restore.Channels.BufferSize)).ToArray(); + var fileprocessor_responses = new Channel[m_options.RestoreFileProcessors].Select(_ => ChannelManager.CreateChannel(buffersize:Restore.Channels.BufferSize)).ToArray(); - // Create the process network - Restore.Channels channels = new (); - var filelister = Restore.FileLister.Run(channels, database, m_options, m_result); - var fileprocessors = Enumerable.Range(0, m_options.RestoreFileProcessors).Select(i => Restore.FileProcessor.Run(channels, database, fileprocessor_requests[i], fileprocessor_responses[i], m_options, m_result)).ToArray(); - var blockmanager = Restore.BlockManager.Run(channels, database, m_options, fileprocessor_requests, fileprocessor_responses); - var volumecache = Restore.VolumeManager.Run(channels, database, backend, m_options, m_result); - var volumedownloaders = Enumerable.Range(0, m_options.RestoreVolumeDownloaders).Select(i => Restore.VolumeDownloader.Run(channels, database, m_options, m_result)).ToArray(); - var volumedecryptors = Enumerable.Range(0, m_options.RestoreVolumeDecryptors).Select(i => Restore.VolumeDecryptor.Run(channels, m_options)).ToArray(); - var volumedecompressors = Enumerable.Range(0, m_options.RestoreVolumeDecompressors).Select(i => Restore.VolumeDecompressor.Run(channels, m_options)).ToArray(); + // Create the process network + Restore.Channels channels = new (); + var filelister = Restore.FileLister.Run(channels, database, m_options, m_result); + var fileprocessors = Enumerable.Range(0, m_options.RestoreFileProcessors).Select(i => Restore.FileProcessor.Run(channels, database, fileprocessor_requests[i], fileprocessor_responses[i], m_options, m_result)).ToArray(); + var blockmanager = Restore.BlockManager.Run(channels, database, m_options, fileprocessor_requests, fileprocessor_responses); + var volumecache = Restore.VolumeManager.Run(channels, database, backend, m_options, m_result); + var volumedownloaders = Enumerable.Range(0, m_options.RestoreVolumeDownloaders).Select(i => Restore.VolumeDownloader.Run(channels, database, m_options, m_result)).ToArray(); + var volumedecryptors = Enumerable.Range(0, m_options.RestoreVolumeDecryptors).Select(i => Restore.VolumeDecryptor.Run(channels, m_options)).ToArray(); + var volumedecompressors = Enumerable.Range(0, m_options.RestoreVolumeDecompressors).Select(i => Restore.VolumeDecompressor.Run(channels, m_options)).ToArray(); - // Wait for the network to complete - Task[] all = - [ - filelister, - ..fileprocessors, - blockmanager, - volumecache, - ..volumedownloaders, - ..volumedecryptors, - ..volumedecompressors - ]; + // Wait for the network to complete + Task[] all = + [ + filelister, + ..fileprocessors, + blockmanager, + volumecache, + ..volumedownloaders, + ..volumedecryptors, + ..volumedecompressors + ]; - // Start the progress updater - var kill_updater = new CancellationTokenSource(); - var updater = Task.Run(async () => { - while (true) - { - m_result.OperationProgressUpdater.UpdatefilesProcessed(m_result.RestoredFiles, m_result.SizeOfRestoredFiles); - await Task.Delay(1000); - } - }, kill_updater.Token); + // Start the progress updater + var kill_updater = new CancellationTokenSource(); + var updater = Task.Run(async () => { + while (true) + { + m_result.OperationProgressUpdater.UpdatefilesProcessed(m_result.RestoredFiles, m_result.SizeOfRestoredFiles); + await Task.Delay(1000); + } + }, kill_updater.Token); - Task.WhenAll(all).Wait(); - kill_updater.Cancel(); - } + Task.WhenAll(all).Wait(); + kill_updater.Cancel(); if (m_result.TaskControlRendevouz() == TaskControlState.Stop) return;