@@ -5059,14 +5059,31 @@ public virtual async Task Lazy_loading_is_thread_safe(bool noTracking, bool asyn
5059
5059
var parent = query . Single ( ) ;
5060
5060
5061
5061
var children = ( await parent . LazyLoadChildren( async ) ) ? . Select ( x => x . Id ) . OrderBy( x => x) . ToList ( ) ;
5062
+ var childrenInvert = ( await parent . LazyLoadChildren( ! async) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5063
+
5062
5064
var singlePkToPk = ( await parent . LazyLoadSinglePkToPk ( async ) ) ? . Id ;
5065
+ var singlePkToPkInvert = ( await parent . LazyLoadSinglePkToPk ( ! async) ) ? . Id ;
5066
+
5063
5067
var single = ( await parent . LazyLoadSingle ( async ) ) ? . Id ;
5068
+ var singleInvert = ( await parent . LazyLoadSingle ( ! async) ) ? . Id ;
5069
+
5064
5070
var childrenAk = ( await parent . LazyLoadChildrenAk ( async ) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5071
+ var childrenAkInvert = ( await parent . LazyLoadChildrenAk ( ! async) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5072
+
5065
5073
var singleAk = ( await parent . LazyLoadSingleAk ( async ) ) ? . Id ;
5074
+ var singleAkInvert = ( await parent . LazyLoadSingleAk ( ! async) ) ? . Id ;
5075
+
5066
5076
var childrenShadowFk = ( await parent . LazyLoadChildrenShadowFk ( async ) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5077
+ var childrenShadowFkInvert = ( await parent . LazyLoadChildrenShadowFk ( ! async) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5078
+
5067
5079
var singleShadowFk = ( await parent . LazyLoadSingleShadowFk ( async ) ) ? . Id ;
5080
+ var singleShadowFkInvert = ( await parent . LazyLoadSingleShadowFk ( ! async) ) ? . Id ;
5081
+
5068
5082
var childrenCompositeKey = ( await parent . LazyLoadChildrenCompositeKey ( async ) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5083
+ var childrenCompositeKeyInvert = ( await parent . LazyLoadChildrenCompositeKey ( ! async) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ;
5084
+
5069
5085
var singleCompositeKey = ( await parent . LazyLoadSingleCompositeKey ( async ) ) ? . Id ;
5086
+ var singleCompositeKeyInvert = ( await parent . LazyLoadSingleCompositeKey ( ! async) ) ? . Id ;
5070
5087
5071
5088
var parent2 = query2. Single ( ) ;
5072
5089
@@ -5075,18 +5092,57 @@ public virtual async Task Lazy_loading_is_thread_safe(bool noTracking, bool asyn
5075
5092
MaxDegreeOfParallelism = Environment. ProcessorCount * 500
5076
5093
} ;
5077
5094
5078
- await Parallel. ForAsync ( 0 , 50000 , parallelOptions , async ( i , ct ) =>
5079
- {
5080
- Assert . Equal ( children , ( await parent2 . LazyLoadChildren ( async ) ) ? . Select( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ) ;
5081
- Assert . Equal ( singlePkToPk , ( await parent2 . LazyLoadSinglePkToPk ( async ) ) ? . Id) ;
5082
- Assert. Equal( single, ( await parent2 . LazyLoadSingle( async ) ) ? . Id) ;
5083
- Assert. Equal( childrenAk , ( await parent2 . LazyLoadChildrenAk( async ) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) ) ;
5084
- Assert . Equal ( singleAk , ( await parent2 . LazyLoadSingleAk( async ) ) ? . Id) ;
5085
- Assert . Equal ( childrenShadowFk , ( await parent2 . LazyLoadChildrenShadowFk( async ) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) ) ;
5086
- Assert . Equal ( singleShadowFk , ( await parent2 . LazyLoadSingleShadowFk( async ) ) ? . Id) ;
5087
- Assert . Equal ( childrenCompositeKey , ( await parent2 . LazyLoadChildrenCompositeKey( async ) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) ) ;
5088
- Assert . Equal ( singleCompositeKey , ( await parent2 . LazyLoadSingleCompositeKey( async ) ) ? . Id) ;
5095
+ await Parallel. ForAsync ( 0 , 10000 , parallelOptions , async ( i , ct ) =>
5096
+ {
5097
+ await Task . WhenAll (
5098
+ AssertEqual (
5099
+ ( children , async ( ) => ( await parent2 . LazyLoadChildren ( async ) ) ? . Select( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) ) ,
5100
+ ( childrenInvert , async ( ) => ( await parent2 . LazyLoadChildren ( ! async) ) ? . Select ( x => x . Id ) . OrderBy ( x => x ) . ToList ( ) )
5101
+ ) ,
5102
+ AssertEqual (
5103
+ ( singlePkToPk , async ( ) => ( await parent2 . LazyLoadSinglePkToPk ( async ) ) ? . Id) ,
5104
+ ( singlePkToPkInvert , async ( ) => ( await parent2 . LazyLoadSinglePkToPk( ! async) ) ? . Id)
5105
+ ) ,
5106
+ AssertEqual (
5107
+ ( single , async ( ) => ( await parent2 . LazyLoadSingle( async ) ) ? . Id) ,
5108
+ ( singleInvert , async ( ) => ( await parent2 . LazyLoadSingle( ! async) ) ? . Id)
5109
+ ) ,
5110
+ AssertEqual (
5111
+ ( childrenAk , async ( ) => ( await parent2 . LazyLoadChildrenAk( async ) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) ) ,
5112
+ ( childrenAkInvert , async ( ) => ( await parent2 . LazyLoadChildrenAk( ! async) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) )
5113
+ ) ,
5114
+ AssertEqual (
5115
+ ( singleAk , async ( ) => ( await parent2 . LazyLoadSingleAk( async ) ) ? . Id) ,
5116
+ ( singleAkInvert , async ( ) => ( await parent2 . LazyLoadSingleAk( ! async) ) ? . Id)
5117
+ ) ,
5118
+ AssertEqual (
5119
+ ( childrenShadowFk , async ( ) => ( await parent2 . LazyLoadChildrenShadowFk( async ) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) ) ,
5120
+ ( childrenShadowFkInvert , async ( ) => ( await parent2 . LazyLoadChildrenShadowFk( ! async) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) )
5121
+ ) ,
5122
+ AssertEqual (
5123
+ ( singleShadowFk , async ( ) => ( await parent2 . LazyLoadSingleShadowFk( async ) ) ? . Id) ,
5124
+ ( singleShadowFkInvert , async ( ) => ( await parent2 . LazyLoadSingleShadowFk( ! async) ) ? . Id)
5125
+ ) ,
5126
+ AssertEqual (
5127
+ ( childrenCompositeKey , async ( ) => ( await parent2 . LazyLoadChildrenCompositeKey( async ) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) ) ,
5128
+ ( childrenCompositeKeyInvert , async ( ) => ( await parent2 . LazyLoadChildrenCompositeKey( ! async) ) ? . Select( x => x. Id) . OrderBy( x => x) . ToList( ) )
5129
+ ) ,
5130
+ AssertEqual (
5131
+ ( singleCompositeKey , async ( ) => ( await parent2 . LazyLoadSingleCompositeKey( async ) ) ? . Id) ,
5132
+ ( singleCompositeKeyInvert , async ( ) => ( await parent2 . LazyLoadSingleCompositeKey( ! async) ) ? . Id)
5133
+ )
5134
+ ) ;
5089
5135
} ) ;
5136
+
5137
+ static async Task AssertEqual< T> ( ( T Data , Func < Task < T > > Expected ) data , ( T Data , Func < Task < T > > Expected ) dataInvert )
5138
+ {
5139
+ //Do the processing at the same time
5140
+ var dataTask = data. Expected( ) ;
5141
+ var dataInvertTask = dataInvert. Expected( ) ;
5142
+
5143
+ Assert . Equal ( data . Data , await dataTask ) ;
5144
+ Assert . Equal ( dataInvert . Data , await dataInvertTask ) ;
5145
+ }
5090
5146
}
5091
5147
5092
5148
private static void SetState (
0 commit comments