@@ -106,20 +106,24 @@ private async Task<List<PackageInfo>> GatherNuGetInfoAsync(int count)
106106
107107 var approvedPackages = new List < PackageInfo > ( ) ;
108108
109- for ( int i = 0 ; i < packages . Count ; i ++ )
109+ int i = 0 ;
110+
111+ await Parallel . ForEachAsync ( packages , new ParallelOptions { MaxDegreeOfParallelism = 4 } , async ( package , _ ) =>
110112 {
111- var ( id , version ) = packages [ i ] ;
112- string prefix = $ "[NuGet { i + 1 } /{ packages . Count } ] { id } { version } ";
113- LastProgressSummary = $ "Checking NuGet package { i + 1 } /{ packages . Count } . Approved { approvedPackages . Count } so far.";
113+ var ( id , version ) = package ;
114+ int iLocal = Interlocked . Increment ( ref i ) ;
115+
116+ string prefix = $ "[NuGet { iLocal } /{ packages . Count } ] { id } { version } ";
117+ LastProgressSummary = $ "Checking NuGet package { iLocal } /{ packages . Count } . Approved { approvedPackages . Count } so far.";
114118
115119 bool isExtra = ExtraPackages . Contains ( id ) ;
116120 if ( ! isExtra )
117121 {
118122 if ( ! await _nuget . IsPermissivelyLicensedAsync ( id , version ) )
119123 {
120124 await LogAsync ( $ "{ prefix } - skipped (non-permissive license)") ;
121- skippedLicense ++ ;
122- continue ;
125+ Interlocked . Increment ( ref skippedLicense ) ;
126+ return ;
123127 }
124128 }
125129
@@ -130,23 +134,27 @@ private async Task<List<PackageInfo>> GatherNuGetInfoAsync(int count)
130134 if ( dll is null || selectedTfm is null )
131135 {
132136 await LogAsync ( $ "{ prefix } - skipped (no suitable DLL)") ;
133- skippedNoDlls ++ ;
137+ Interlocked . Increment ( ref skippedLicense ) ;
134138 DeleteDirectory ( pkgDir ) ;
135- continue ;
139+ return ;
136140 }
137141
138142 var deps = await _nuget . ResolveAllDependenciesAsync ( id , version , skipLicenseCheck : isExtra ) ;
139143 if ( deps is null )
140144 {
141145 await LogAsync ( $ "{ prefix } - skipped (dependency with non-permissive license)") ;
142- skippedLicense ++ ;
146+ Interlocked . Increment ( ref skippedLicense ) ;
143147 DeleteDirectory ( pkgDir ) ;
144- continue ;
148+ return ;
149+ }
150+
151+ lock ( approvedPackages )
152+ {
153+ approvedPackages . Add ( new PackageInfo ( id , version , pkgDir , dll , deps ) ) ;
145154 }
146155
147- approvedPackages . Add ( new PackageInfo ( id , version , pkgDir , dll , deps ) ) ;
148156 await LogAsync ( $ "{ prefix } - approved ({ deps . Count } deps)") ;
149- }
157+ } ) ;
150158
151159 await LogAsync ( $ "Phase 1 complete: { approvedPackages . Count } approved, { skippedLicense } license, { skippedNoDlls } no DLLs") ;
152160
@@ -155,7 +163,10 @@ private async Task<List<PackageInfo>> GatherNuGetInfoAsync(int count)
155163 throw new Exception ( "No packages passed license and DLL checks." ) ;
156164 }
157165
158- return approvedPackages ;
166+ return packages
167+ . Select ( p => approvedPackages . FirstOrDefault ( ap => ap . Id . Equals ( p . Id , StringComparison . OrdinalIgnoreCase ) && ap . Version . Equals ( p . Version , StringComparison . OrdinalIgnoreCase ) ) )
168+ . Where ( ap => ap is not null )
169+ . ToList ( ) ! ;
159170 }
160171
161172 private async Task ProcessApprovedPackagesAsync ( List < PackageInfo > approvedPackages , int maxPackagesToInclude )
0 commit comments