@@ -63,6 +63,7 @@ internal abstract class DataVirtualizingCollectionBuilderBase<TItem, TVirtualiza
63
63
private Func < int , int , CancellationToken , Task < TItem [ ] > > ? _taskBasedPageFetcher ;
64
64
private Func < int , int , CancellationToken , IAsyncEnumerable < TItem > > ? _asyncEnumerableBasedPageFetcher ;
65
65
protected Func < CancellationToken , int > ? CountFetcher ;
66
+ private IAsyncPageFetchScheduler ? _asyncPageFetchScheduler ;
66
67
67
68
private Func < IObservable < ( int PageKey , int PageIndex ) > , IObservable < IReadOnlyList < int > > > _pageHoldingBehavior =
68
69
HoardingPageNonRemoval . Create ( ) ;
@@ -150,6 +151,7 @@ public TVirtualizationKind AsyncIndexAccess(
150
151
{
151
152
_indexAccessBehavior = IndexAccessBehavior . Asynchronous ;
152
153
_placeholderFactory = placeholderFactory ;
154
+ _asyncPageFetchScheduler = new ImmediateAsyncPageFetchScheduler ( ) ;
153
155
return GenerateCollection ( ) ;
154
156
}
155
157
@@ -273,13 +275,15 @@ IPage<TItem> NonPreloadingPageFetcherFactory(
273
275
{
274
276
var taskBasedPageFetcher = _taskBasedPageFetcher ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
275
277
var placeholderFactory = _placeholderFactory ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
278
+ var asyncPageFetchScheduler = _asyncPageFetchScheduler ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
276
279
return new AsyncTaskBasedPage < TItem > (
277
280
pageKey ,
278
281
offset ,
279
282
pageSize ,
280
283
onDisposalAfterFetchCompleted ,
281
284
taskBasedPageFetcher ,
282
285
placeholderFactory ,
286
+ asyncPageFetchScheduler ,
283
287
_pageBackgroundScheduler ,
284
288
pageFetchEvents . AsObserver ( ) ) ;
285
289
}
@@ -293,13 +297,15 @@ IPage<TItem> PreloadingPageFetcherFactory(
293
297
var taskBasedPageFetcher = _taskBasedPageFetcher ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
294
298
var preloadingPlaceholderFactory = _preloadingPlaceholderFactory ??
295
299
throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
300
+ var asyncPageFetchScheduler = _asyncPageFetchScheduler ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
296
301
return new AsyncTaskBasedPage < TItem > (
297
302
pageKey ,
298
303
offset ,
299
304
pageSize ,
300
305
onDisposalAfterFetchCompleted ,
301
306
taskBasedPageFetcher ,
302
307
preloadingPlaceholderFactory ,
308
+ asyncPageFetchScheduler ,
303
309
_preloadingBackgroundScheduler ,
304
310
pageFetchEvents . AsObserver ( ) ) ;
305
311
}
@@ -323,13 +329,15 @@ IPage<TItem> NonPreloadingPageFetcherFactory(
323
329
{
324
330
var asyncEnumerableBasedPageFetcher = _asyncEnumerableBasedPageFetcher ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
325
331
var placeholderFactory = _placeholderFactory ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
332
+ var asyncPageFetchScheduler = _asyncPageFetchScheduler ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
326
333
return new AsyncEnumerableBasedPage < TItem > (
327
334
pageKey ,
328
335
offset ,
329
336
pageSize ,
330
337
onDisposalAfterFetchCompleted ,
331
338
asyncEnumerableBasedPageFetcher ,
332
339
placeholderFactory ,
340
+ asyncPageFetchScheduler ,
333
341
_pageBackgroundScheduler ,
334
342
pageFetchEvents . AsObserver ( ) ) ;
335
343
}
@@ -343,13 +351,15 @@ IPage<TItem> PreloadingPageFetcherFactory(
343
351
var asyncEnumerableBasedPageFetcher = _asyncEnumerableBasedPageFetcher ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
344
352
var preloadingPlaceholderFactory = _preloadingPlaceholderFactory ??
345
353
throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
354
+ var asyncPageFetchScheduler = _asyncPageFetchScheduler ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
346
355
return new AsyncEnumerableBasedPage < TItem > (
347
356
pageKey ,
348
357
offset ,
349
358
pageSize ,
350
359
onDisposalAfterFetchCompleted ,
351
360
asyncEnumerableBasedPageFetcher ,
352
361
preloadingPlaceholderFactory ,
362
+ asyncPageFetchScheduler ,
353
363
_preloadingBackgroundScheduler ,
354
364
pageFetchEvents . AsObserver ( ) ) ;
355
365
}
@@ -373,13 +383,15 @@ IPage<TItem> NonPreloadingPageFetcherFactory(
373
383
{
374
384
var pageFetcher = _pageFetcher ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
375
385
var placeholderFactory = _placeholderFactory ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
386
+ var asyncPageFetchScheduler = _asyncPageFetchScheduler ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
376
387
return new AsyncNonTaskBasedPage < TItem > (
377
388
pageKey ,
378
389
offset ,
379
390
pageSize ,
380
391
onDisposalAfterFetchCompleted ,
381
392
pageFetcher ,
382
393
placeholderFactory ,
394
+ asyncPageFetchScheduler ,
383
395
_pageBackgroundScheduler ,
384
396
pageFetchEvents . AsObserver ( ) ) ;
385
397
}
@@ -393,13 +405,15 @@ IPage<TItem> PreloadingPageFetcherFactory(
393
405
var pageFetcher = _pageFetcher ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
394
406
var preloadingPlaceholderFactory = _preloadingPlaceholderFactory ??
395
407
throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
408
+ var asyncPageFetchScheduler = _asyncPageFetchScheduler ?? throw new NullReferenceException ( UninitializedElementsExceptionMessage ) ;
396
409
return new AsyncNonTaskBasedPage < TItem > (
397
410
pageKey ,
398
411
offset ,
399
412
pageSize ,
400
413
onDisposalAfterFetchCompleted ,
401
414
pageFetcher ,
402
415
preloadingPlaceholderFactory ,
416
+ asyncPageFetchScheduler ,
403
417
_preloadingBackgroundScheduler ,
404
418
pageFetchEvents . AsObserver ( ) ) ;
405
419
}
@@ -413,6 +427,7 @@ IPageStorage<TItem> PageStoreFactoryComposition(int count)
413
427
internal Func < int , IPageStorage < TItem > > GenerateNonTaskBasedSynchronousPageStorage (
414
428
Subject < ( int Offset , int PageSize , TItem [ ] PreviousPage , TItem [ ] Page ) > pageFetchEvents )
415
429
{
430
+ var immediateAsyncPageFetchScheduler = new ImmediateAsyncPageFetchScheduler ( ) ;
416
431
return PageStoreFactoryComposition ;
417
432
418
433
IPage < TItem > NonPreloadingPageFetcherFactory (
@@ -447,6 +462,7 @@ IPage<TItem> PreloadingPageFetcherFactory(
447
462
onDisposalAfterFetchCompleted ,
448
463
pageFetcher ,
449
464
preloadingPlaceholderFactory ,
465
+ immediateAsyncPageFetchScheduler ,
450
466
_preloadingBackgroundScheduler ,
451
467
pageFetchEvents . AsObserver ( ) ) ;
452
468
}
0 commit comments