diff --git a/src/ZonyLrcTools.Common/Lyrics/ILyricsDownloader.cs b/src/ZonyLrcTools.Common/Lyrics/ILyricsDownloader.cs index 45a896c..312b0ae 100644 --- a/src/ZonyLrcTools.Common/Lyrics/ILyricsDownloader.cs +++ b/src/ZonyLrcTools.Common/Lyrics/ILyricsDownloader.cs @@ -10,9 +10,11 @@ public interface ILyricsDownloader /// /// 需要下载的歌词信息。 /// 下载线程/并发量。 + /// 任务完成之后的回调方法。 /// 任务取消标记。 Task DownloadAsync(List needDownloadMusicInfos, - int parallelCount = 2, + int parallelCount = 1, + Func? callback = null, CancellationToken cancellationToken = default); /// diff --git a/src/ZonyLrcTools.Common/Lyrics/LyricsDownloader.cs b/src/ZonyLrcTools.Common/Lyrics/LyricsDownloader.cs index 7516da4..17edeba 100644 --- a/src/ZonyLrcTools.Common/Lyrics/LyricsDownloader.cs +++ b/src/ZonyLrcTools.Common/Lyrics/LyricsDownloader.cs @@ -10,6 +10,7 @@ using ZonyLrcTools.Common.Infrastructure.Threading; namespace ZonyLrcTools.Common.Lyrics; +/// public class LyricsDownloader : ILyricsDownloader, ISingletonDependency { private readonly IEnumerable _lyricsProviders; @@ -38,6 +39,7 @@ public class LyricsDownloader : ILyricsDownloader, ISingletonDependency public async Task DownloadAsync(List needDownloadMusicInfos, int parallelCount = 1, + Func? callback = null, CancellationToken cancellationToken = default) { await _logger.InfoAsync("开始下载歌词文件数据..."); @@ -57,12 +59,12 @@ public class LyricsDownloader : ILyricsDownloader, ISingletonDependency { await DownloadAndWriteLyricsAsync(lyricsProvider, info); - if (info.IsSuccessful) - { - _logger.LogSuccessful(info); - return; - } + if (!info.IsSuccessful) continue; + _logger.LogSuccessful(info); + break; } + + if (callback != null) await callback(info); }, cancellationToken), cancellationToken)); await Task.WhenAll(downloadTasks);