@@ -16,23 +16,32 @@ public class MultiBlockDownloader : ISyncDownloader<BlocksRequest>
1616{
1717 public async Task Dispatch ( PeerInfo peerInfo , BlocksRequest request , CancellationToken cancellationToken )
1818 {
19- request . DownloadTask = Task . Run ( async ( ) =>
19+ cancellationToken . ThrowIfCancellationRequested ( ) ;
20+ if ( request . BodiesRequests . Count == 0 && request . ReceiptsRequests . Count == 0 )
2021 {
21- if ( request . BodiesRequests . Count > 0 )
22- {
23- using IOwnedReadOnlyList < Hash256 > bodiesHash = request . BodiesRequests . Select ( b => b . Hash )
24- . ToPooledList ( request . BodiesRequests . Count ) ;
25- request . OwnedBodies = await peerInfo . SyncPeer . GetBlockBodies ( bodiesHash , cancellationToken ) ;
26- }
22+ request . DownloadTask = Task . CompletedTask ;
23+ return ;
24+ }
2725
28- if ( request . ReceiptsRequests . Count > 0 )
29- {
30- using IOwnedReadOnlyList < Hash256 > receiptsHash = request . ReceiptsRequests . Select ( b => b . Hash )
31- . ToPooledList ( request . ReceiptsRequests . Count ) ;
32- var ownedReceipts = await peerInfo . SyncPeer . GetReceipts ( receiptsHash , cancellationToken ) ;
33- request . Receipts = ownedReceipts ;
34- }
35- } , cancellationToken ) ;
26+ request . DownloadTask = DownloadAsync ( peerInfo , request , cancellationToken ) ;
3627 await request . DownloadTask ;
3728 }
29+
30+ private static async Task DownloadAsync ( PeerInfo peerInfo , BlocksRequest request , CancellationToken cancellationToken )
31+ {
32+ if ( request . BodiesRequests . Count > 0 )
33+ {
34+ using IOwnedReadOnlyList < Hash256 > bodiesHash = request . BodiesRequests . Select ( b => b . Hash )
35+ . ToPooledList ( request . BodiesRequests . Count ) ;
36+ request . OwnedBodies = await peerInfo . SyncPeer . GetBlockBodies ( bodiesHash , cancellationToken ) ;
37+ }
38+
39+ if ( request . ReceiptsRequests . Count > 0 )
40+ {
41+ using IOwnedReadOnlyList < Hash256 > receiptsHash = request . ReceiptsRequests . Select ( b => b . Hash )
42+ . ToPooledList ( request . ReceiptsRequests . Count ) ;
43+ var ownedReceipts = await peerInfo . SyncPeer . GetReceipts ( receiptsHash , cancellationToken ) ;
44+ request . Receipts = ownedReceipts ;
45+ }
46+ }
3847}
0 commit comments