@@ -222,23 +222,20 @@ private static async Task FindResultsInUnreferencedProjectSourceSymbolsAsync(
222
222
223
223
// Defer to the ProducerConsumer. We're search the unreferenced projects in parallel. As we get results, we'll
224
224
// add them to the 'allSymbolReferences' queue. If we get enough results, we'll cancel all the other work.
225
- await ProducerConsumer < ImmutableArray < SymbolReference > > . RunAsync (
226
- ProducerConsumerOptions . SingleReaderOptions ,
227
- produceItems : static ( onItemsFound , args ) => RoslynParallel . ForEachAsync (
228
- args . viableUnreferencedProjects ,
229
- args . linkedTokenSource . Token ,
230
- async ( project , cancellationToken ) =>
231
- {
232
- // Search in this unreferenced project. But don't search in any of its' direct references. i.e. we
233
- // don't want to search in its metadata references or in the projects it references itself. We'll be
234
- // searching those entities individually.
235
- var references = await args . finder . FindInSourceSymbolsInProjectAsync (
236
- args . projectToAssembly , project , args . exact , cancellationToken ) . ConfigureAwait ( false ) ;
237
- onItemsFound ( references ) ;
238
- } ) ,
239
- consumeItems : static ( symbolReferencesEnumerable , args ) =>
225
+ await ProducerConsumer < ImmutableArray < SymbolReference > > . RunParallelAsync (
226
+ source : viableUnreferencedProjects ,
227
+ produceItems : static async ( project , onItemsFound , args , cancellationToken ) =>
228
+ {
229
+ // Search in this unreferenced project. But don't search in any of its' direct references. i.e. we
230
+ // don't want to search in its metadata references or in the projects it references itself. We'll be
231
+ // searching those entities individually.
232
+ var references = await args . finder . FindInSourceSymbolsInProjectAsync (
233
+ args . projectToAssembly , project , args . exact , cancellationToken ) . ConfigureAwait ( false ) ;
234
+ onItemsFound ( references ) ;
235
+ } ,
236
+ consumeItems : static ( symbolReferencesEnumerable , args , cancellationToken ) =>
240
237
ProcessReferencesAsync ( args . allSymbolReferences , args . maxResults , symbolReferencesEnumerable , args . linkedTokenSource ) ,
241
- args : ( projectToAssembly , allSymbolReferences , maxResults , finder , exact , viableUnreferencedProjects , linkedTokenSource ) ,
238
+ args : ( projectToAssembly , allSymbolReferences , maxResults , finder , exact , linkedTokenSource ) ,
242
239
linkedTokenSource . Token ) . ConfigureAwait ( false ) ;
243
240
}
244
241
@@ -266,27 +263,24 @@ private async Task FindResultsInUnreferencedMetadataSymbolsAsync(
266
263
267
264
// Defer to the ProducerConsumer. We're search the metadata references in parallel. As we get results, we'll
268
265
// add them to the 'allSymbolReferences' queue. If we get enough results, we'll cancel all the other work.
269
- await ProducerConsumer < ImmutableArray < SymbolReference > > . RunAsync (
270
- ProducerConsumerOptions . SingleReaderOptions ,
271
- produceItems : static ( onItemsFound , args ) => RoslynParallel . ForEachAsync (
272
- args . newReferences ,
273
- args . linkedTokenSource . Token ,
274
- async ( tuple , cancellationToken ) =>
275
- {
276
- var ( referenceProject , reference ) = tuple ;
277
- var compilation = args . referenceToCompilation . GetOrAdd (
278
- reference , r => CreateCompilation ( args . project , r ) ) ;
279
-
280
- // Ignore netmodules. First, they're incredibly esoteric and barely used.
281
- // Second, the SymbolFinder API doesn't even support searching them.
282
- if ( compilation . GetAssemblyOrModuleSymbol ( reference ) is not IAssemblySymbol assembly )
283
- return ;
284
-
285
- var references = await args . finder . FindInMetadataSymbolsAsync (
286
- assembly , referenceProject , reference , args . exact , args . linkedTokenSource . Token ) . ConfigureAwait ( false ) ;
287
- onItemsFound ( references ) ;
288
- } ) ,
289
- consumeItems : static ( symbolReferencesEnumerable , args ) =>
266
+ await ProducerConsumer < ImmutableArray < SymbolReference > > . RunParallelAsync (
267
+ source : newReferences ,
268
+ produceItems : static async ( tuple , onItemsFound , args , cancellationToken ) =>
269
+ {
270
+ var ( referenceProject , reference ) = tuple ;
271
+ var compilation = args . referenceToCompilation . GetOrAdd (
272
+ reference , r => CreateCompilation ( args . project , r ) ) ;
273
+
274
+ // Ignore netmodules. First, they're incredibly esoteric and barely used.
275
+ // Second, the SymbolFinder API doesn't even support searching them.
276
+ if ( compilation . GetAssemblyOrModuleSymbol ( reference ) is not IAssemblySymbol assembly )
277
+ return ;
278
+
279
+ var references = await args . finder . FindInMetadataSymbolsAsync (
280
+ assembly , referenceProject , reference , args . exact , cancellationToken ) . ConfigureAwait ( false ) ;
281
+ onItemsFound ( references ) ;
282
+ } ,
283
+ consumeItems : static ( symbolReferencesEnumerable , args , cancellationToken ) =>
290
284
ProcessReferencesAsync ( args . allSymbolReferences , args . maxResults , symbolReferencesEnumerable , args . linkedTokenSource ) ,
291
285
args : ( referenceToCompilation , project , allSymbolReferences , maxResults , finder , exact , newReferences , linkedTokenSource ) ,
292
286
linkedTokenSource . Token ) . ConfigureAwait ( false ) ;
0 commit comments