|
@@ -436,8 +436,8 @@ internal static class Downloader
|
|
|
var assetsCount = assetsJson?.Objects?.Count ?? 1;
|
|
|
var assetsIterator = 1;
|
|
|
|
|
|
- List<Task> assetsDownloadTasks = new();
|
|
|
- using SemaphoreSlim concurrencySemaphore = new(0, 40);
|
|
|
+ List<Task> assetsDownloadTasks = new(assetsJson?.Objects?.Count ?? 1024);
|
|
|
+ using SemaphoreSlim concurrencySemaphore = new(40, 40);
|
|
|
|
|
|
foreach (var asset in assetsJson?.Objects?.DistinctBy(a => a.Value.Hash) ?? new Dictionary<string,Asset>())
|
|
|
{
|
|
@@ -458,24 +458,28 @@ internal static class Downloader
|
|
|
|
|
|
if (chksum != asset.Value.Hash)
|
|
|
{
|
|
|
- concurrencySemaphore.Wait(cancellationToken);
|
|
|
- if (!Directory.Exists(assetsPath + "/" + folder))
|
|
|
- Directory.CreateDirectory(assetsPath + "/" + folder);
|
|
|
-
|
|
|
- Settings.logger.Debug("Downloading asset: {0} ", asset.Value.Hash);
|
|
|
- //DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
- DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
- await DownloadFileAsync(assetsUrl + folder + "/" + asset.Value.Hash, assetsPath + "/" + folder + "/" + asset.Value.Hash, cancellationToken);
|
|
|
- concurrencySemaphore.Release();
|
|
|
+ await concurrencySemaphore.WaitAsync(cancellationToken);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!Directory.Exists(assetsPath + "/" + folder))
|
|
|
+ Directory.CreateDirectory(assetsPath + "/" + folder);
|
|
|
+
|
|
|
+ Settings.logger.Debug("Downloading asset: {0} ", asset.Value.Hash);
|
|
|
+ //DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
+ DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
+ await DownloadFileAsync(assetsUrl + folder + "/" + asset.Value.Hash, assetsPath + "/" + folder + "/" + asset.Value.Hash, cancellationToken);
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ concurrencySemaphore.Release();
|
|
|
+ }
|
|
|
}
|
|
|
SetProgress(assetsIterator * 100 / assetsCount);
|
|
|
Interlocked.Increment(ref assetsIterator);
|
|
|
|
|
|
}));
|
|
|
}
|
|
|
-
|
|
|
- Task.WaitAll(assetsDownloadTasks.ToArray());
|
|
|
- concurrencySemaphore.Release(40);
|
|
|
+ Task.WaitAll(assetsDownloadTasks.ToArray());
|
|
|
|
|
|
SetProgress(100);
|
|
|
tasksIterator++;
|