天需要些一个小工具,需要使用到多线程读写程序集,接口方法返回值类型需要为"IEnumerable<string>"这里用到了"yield return",但是同时也使用了同步锁,为了确认代码没有问题,决定分析下 yield 的实现原理,测试代码如下:
class Program {public static void Main(string[] args) { IEnumerable<string> coll = CreateCollection();foreach (string str in coll) { Console.WriteLine($"read: {str}"); } }private static IEnumerable<string> CreateCollection() {using (BlockingCollection<string> collection = new BlockingCollection<string>()) {lock (globalLock) { Exception err = null; Task.Factory.StartNew(() =>{lock (globalLock) {for (int i = 0; i < 10; i++) { Thread.Sleep(100);string value = $"value: {i}"; Console.WriteLine($"write: {value}"); collection.Add($"value: {i}"); Console.WriteLine($"end write: {value}"); } } }).ContinueWith((task) =>{ collection.CompleteAdding(); err = task.Exception; }); }foreach (string item in collection.GetConsumingEnumerable()) {yield return item; } } }private static readonly object globalLock = new object(); }
运行以上代码,结果如下:
结果是期望结果,但无法确定是否有其他问题,所以决定查看下IL代码,如下:
1 // Token: 0x02000002 RID: 2 2 .class private auto ansi beforefieldinit ConsoleApp1.Program 3 extends [mscorlib]System.Object 4 { 5 // Nested Types 6 // Token: 0x02000003 RID: 3 7 .class nested private auto ansi sealed beforefieldinit '<>c__DisplayClass1_0' 8 extends [mscorlib]System.Object 9 { 10 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 11 01 00 00 00 12 ) 13 // Fields 14 // Token: 0x04000002 RID: 2 15 .field public class [System]System.Collections.Concurrent.BlockingCollection`1<string> collection 16 17 // Methods 18 // Token: 0x06000005 RID: 5 RVA: 0x000020CE File Offset: 0x000002CE 19 .method public hidebysig specialname rtspecialname 20 instance void .ctor () cil managed 21 { 22 // Header Size: 1 byte 23 // Code Size: 8 (0x8) bytes 24 .maxstack 8 25 26 /* 0x000002CF 02 */ IL_0000: ldarg.0 27 /* 0x000002D0 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor() 28 /* 0x000002D5 00 */ IL_0006: nop 29 /* 0x000002D6 2A */ IL_0007: ret 30 } // end of method '<>c__DisplayClass1_0'::.ctor 31 32 // Token: 0x06000006 RID: 6 RVA: 0x000020D8 File Offset: 0x000002D8 33 .method assembly hidebysig 34 instance void '<CreateCollection>b__0' () cil managed 35 { 36 // Header Size: 12 bytes 37 // Code Size: 142 (0x8E) bytes 38 // LocalVarSig Token: 0x11000002 RID: 2 39 .maxstack 3 40 .locals init ( 41 [0] object, 42 [1] bool, 43 [2] int32 i, 44 [3] string 'value', 45 [4] bool 46 ) 47 48 /* (31,21)-(31,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 49 /* 0x000002E4 00 */ IL_0000: nop 50 /* (32,25)-(32,42) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 51 /* 0x000002E5 7E01000004 */ IL_0001: ldsfld object ConsoleApp1.Program::globalLock 52 /* 0x000002EA 0A */ IL_0006: stloc.0 53 /* 0x000002EB 16 */ IL_0007: ldc.i4.0 54 /* 0x000002EC 0B */ IL_0008: stloc.1 55 .try 56 { 57 /* 0x000002ED 06 */ IL_0009: ldloc.0 58 /* 0x000002EE 1201 */ IL_000A: ldloca.s V_1 59 /* 0x000002F0 281B00000A */ IL_000C: call void [mscorlib]System.Threading.Monitor::Enter(object, bool&) 60 /* 0x000002F5 00 */ IL_0011: nop 61 /* (33,25)-(33,26) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 62 /* 0x000002F6 00 */ IL_0012: nop 63 /* (34,34)-(34,43) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 64 /* 0x000002F7 16 */ IL_0013: ldc.i4.0 65 /* 0x000002F8 0C */ IL_0014: stloc.2 66 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 67 /* 0x000002F9 2B5D */ IL_0015: br.s IL_0074 68 // loop start (head: IL_0074) 69 /* (35,29)-(35,30) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 70 /* 0x000002FB 00 */ IL_0017: nop 71 /* (36,33)-(36,51) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 72 /* 0x000002FC 1F64 */ IL_0018: ldc.i4.s 100 73 /* 0x000002FE 281C00000A */ IL_001A: call void [mscorlib]System.Threading.Thread::Sleep(int32) 74 /* 0x00000303 00 */ IL_001F: nop 75 /* (37,33)-(37,62) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 76 /* 0x00000304 720F000070 */ IL_0020: ldstr "value: {0}" 77 /* 0x00000309 08 */ IL_0025: ldloc.2 78 /* 0x0000030A 8C1F000001 */ IL_0026: box [mscorlib]System.Int32 79 /* 0x0000030F 281D00000A */ IL_002B: call string [mscorlib]System.String::Format(string, object) 80 /* 0x00000314 0D */ IL_0030: stloc.3 81 /* (38,33)-(38,70) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 82 /* 0x00000315 7225000070 */ IL_0031: ldstr "write: " 83 /* 0x0000031A 09 */ IL_0036: ldloc.3 84 /* 0x0000031B 281800000A */ IL_0037: call string [mscorlib]System.String::Concat(string, string) 85 /* 0x00000320 281900000A */ IL_003C: call void [mscorlib]System.Console::WriteLine(string) 86 /* 0x00000325 00 */ IL_0041: nop 87 /* (39,33)-(39,63) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 88 /* 0x00000326 02 */ IL_0042: ldarg.0 89 /* 0x00000327 7B02000004 */ IL_0043: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 90 /* 0x0000032C 720F000070 */ IL_0048: ldstr "value: {0}" 91 /* 0x00000331 08 */ IL_004D: ldloc.2 92 /* 0x00000332 8C1F000001 */ IL_004E: box [mscorlib]System.Int32 93 /* 0x00000337 281D00000A */ IL_0053: call string [mscorlib]System.String::Format(string, object) 94 /* 0x0000033C 6F1E00000A */ IL_0058: callvirt instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::Add(!0) 95 /* 0x00000341 00 */ IL_005D: nop 96 /* (40,33)-(40,74) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 97 /* 0x00000342 7235000070 */ IL_005E: ldstr "end write: " 98 /* 0x00000347 09 */ IL_0063: ldloc.3 99 /* 0x00000348 281800000A */ IL_0064: call string [mscorlib]System.String::Concat(string, string)100 /* 0x0000034D 281900000A */ IL_0069: call void [mscorlib]System.Console::WriteLine(string)101 /* 0x00000352 00 */ IL_006E: nop102 /* (41,29)-(41,30) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */103 /* 0x00000353 00 */ IL_006F: nop104 /* (34,53)-(34,56) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */105 /* 0x00000354 08 */ IL_0070: ldloc.2106 /* 0x00000355 17 */ IL_0071: ldc.i4.1107 /* 0x00000356 58 */ IL_0072: add108 /* 0x00000357 0C */ IL_0073: stloc.2109 110 /* (34,45)-(34,51) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */111 /* 0x00000358 08 */ IL_0074: ldloc.2112 /* 0x00000359 1F0A */ IL_0075: ldc.i4.s 10113 /* 0x0000035B FE04 */ IL_0077: clt114 /* 0x0000035D 1304 */ IL_0079: stloc.s V_4115 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */116 /* 0x0000035F 1104 */ IL_007B: ldloc.s V_4117 /* 0x00000361 2D98 */ IL_007D: brtrue.s IL_0017118 // end loop119 120 /* (42,25)-(42,26) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */121 /* 0x00000363 00 */ IL_007F: nop122 /* 0x00000364 DE0B */ IL_0080: leave.s IL_008D123 } // end .try124 finally125 {126 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */127 /* 0x00000366 07 */ IL_0082: ldloc.1128 /* 0x00000367 2C07 */ IL_0083: brfalse.s IL_008C129 130 /* 0x00000369 06 */ IL_0085: ldloc.0131 /* 0x0000036A 281F00000A */ IL_0086: call void [mscorlib]System.Threading.Monitor::Exit(object)132 /* 0x0000036F 00 */ IL_008B: nop133 134 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */135 /* 0x00000370 DC */ IL_008C: endfinally136 } // end handler137 138 /* (43,21)-(43,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */139 /* 0x00000371 2A */ IL_008D: ret140 } // end of method '<>c__DisplayClass1_0'::'<CreateCollection>b__0'141 142 } // end of class <>c__DisplayClass1_0143 144 // Token: 0x02000004 RID: 4145 .class nested private auto ansi sealed beforefieldinit '<>c__DisplayClass1_1'146 extends [mscorlib]System.Object147 {148 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (149 01 00 00 00150 )151 // Fields152 // Token: 0x04000003 RID: 3153 .field public class [mscorlib]System.Exception err154 // Token: 0x04000004 RID: 4155 .field public class ConsoleApp1.Program/'<>c__DisplayClass1_0' 'CS$<>8__locals1'156 157 // Methods158 // Token: 0x06000007 RID: 7 RVA: 0x00002184 File Offset: 0x00000384159 .method public hidebysig specialname rtspecialname 160 instance void .ctor () cil managed 161 {162 // Header Size: 1 byte163 // Code Size: 8 (0x8) bytes164 .maxstack 8165 166 /* 0x00000385 02 */ IL_0000: ldarg.0167 /* 0x00000386 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()168 /* 0x0000038B 00 */ IL_0006: nop169 /* 0x0000038C 2A */ IL_0007: ret170 } // end of method '<>c__DisplayClass1_1'::.ctor171 172 // Token: 0x06000008 RID: 8 RVA: 0x0000218D File Offset: 0x0000038D173 .method assembly hidebysig 174 instance void '<CreateCollection>b__1' (175 class [mscorlib]System.Threading.Tasks.Task task176 ) cil managed 177 {178 // Header Size: 1 byte179 // Code Size: 31 (0x1F) bytes180 .maxstack 8181 182 /* (44,21)-(44,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */183 /* 0x0000038E 00 */ IL_0000: nop184 /* (45,25)-(45,53) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */185 /* 0x0000038F 02 */ IL_0001: ldarg.0186 /* 0x00000390 7B04000004 */ IL_0002: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1'187 /* 0x00000395 7B02000004 */ IL_0007: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection188 /* 0x0000039A 6F2000000A */ IL_000C: callvirt instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::CompleteAdding()189 /* 0x0000039F 00 */ IL_0011: nop190 /* (46,25)-(46,46) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */191 /* 0x000003A0 02 */ IL_0012: ldarg.0192 /* 0x000003A1 03 */ IL_0013: ldarg.1193 /* 0x000003A2 6F2100000A */ IL_0014: callvirt instance class [mscorlib]System.AggregateException [mscorlib]System.Threading.Tasks.Task::get_Exception()194 /* 0x000003A7 7D03000004 */ IL_0019: stfld class [mscorlib]System.Exception ConsoleApp1.Program/'<>c__DisplayClass1_1'::err195 /* (47,21)-(47,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */196 /* 0x000003AC 2A */ IL_001E: ret197 } // end of method '<>c__DisplayClass1_1'::'<CreateCollection>b__1'198 199 } // end of class <>c__DisplayClass1_1200 201 // Token: 0x02000005 RID: 5202 .class nested private auto ansi sealed beforefieldinit '<CreateCollection>d__1'203 extends [mscorlib]System.Object204 implements class [mscorlib]System.Collections.Generic.IEnumerable`1<string>,205 [mscorlib]System.Collections.IEnumerable,206 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>,207 [mscorlib]System.IDisposable,208 [mscorlib]System.Collections.IEnumerator209 {210 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (211 01 00 00 00212 )213 // Fields214 // Token: 0x04000005 RID: 5215 .field private int32 '<>1__state'216 // Token: 0x04000006 RID: 6217 .field private string '<>2__current'218 // Token: 0x04000007 RID: 7219 .field private int32 '<>l__initialThreadId'220 // Token: 0x04000008 RID: 8221 .field private class ConsoleApp1.Program/'<>c__DisplayClass1_0' '<>8__1'222 // Token: 0x04000009 RID: 9223 .field private object '<>s__2'224 // Token: 0x0400000A RID: 10225 .field private bool '<>s__3'226 // Token: 0x0400000B RID: 11227 .field private class ConsoleApp1.Program/'<>c__DisplayClass1_1' '<>8__4'228 // Token: 0x0400000C RID: 12229 .field private class [mscorlib]System.Collections.Generic.IEnumerator`1<string> '<>s__5'230 // Token: 0x0400000D RID: 13231 .field private string '<item>5__6'232 233 // Methods234 // Token: 0x06000009 RID: 9 RVA: 0x000021AD File Offset: 0x000003AD235 .method public hidebysig specialname rtspecialname 236 instance void .ctor (237 int32 '<>1__state'238 ) cil managed 239 {240 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (241 01 00 00 00242 )243 // Header Size: 1 byte244 // Code Size: 31 (0x1F) bytes245 .maxstack 8246 247 /* 0x000003AE 02 */ IL_0000: ldarg.0248 /* 0x000003AF 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()249 /* 0x000003B4 00 */ IL_0006: nop250 /* 0x000003B5 02 */ IL_0007: ldarg.0251 /* 0x000003B6 03 */ IL_0008: ldarg.1252 /* 0x000003B7 7D05000004 */ IL_0009: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'253 /* 0x000003BC 02 */ IL_000E: ldarg.0254 /* 0x000003BD 282200000A */ IL_000F: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread()255 /* 0x000003C2 6F2300000A */ IL_0014: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId()256 /* 0x000003C7 7D07000004 */ IL_0019: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>l__initialThreadId'257 /* 0x000003CC 2A */ IL_001E: ret258 } // end of method '<CreateCollection>d__1'::.ctor259 260 // Token: 0x0600000A RID: 10 RVA: 0x000021D0 File Offset: 0x000003D0261 .method private final hidebysig newslot virtual 262 instance void System.IDisposable.Dispose () cil managed 263 {264 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (265 01 00 00 00266 )267 .override method instance void [mscorlib]System.IDisposable::Dispose()268 // Header Size: 12 bytes269 // Code Size: 60 (0x3C) bytes270 // LocalVarSig Token: 0x11000003 RID: 3271 .maxstack 2272 .locals init (273 [0] int32274 )275 276 /* 0x000003DC 02 */ IL_0000: ldarg.0277 /* 0x000003DD 7B05000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'278 /* 0x000003E2 0A */ IL_0006: stloc.0279 /* 0x000003E3 06 */ IL_0007: ldloc.0280 /* 0x000003E4 1FFC */ IL_0008: ldc.i4.s -4281 /* 0x000003E6 59 */ IL_000A: sub282 /* 0x000003E7 17 */ IL_000B: ldc.i4.1283 /* 0x000003E8 3608 */ IL_000C: ble.un.s IL_0016284 285 /* 0x000003EA 2B00 */ IL_000E: br.s IL_0010286 287 /* 0x000003EC 06 */ IL_0010: ldloc.0288 /* 0x000003ED 17 */ IL_0011: ldc.i4.1289 /* 0x000003EE 2E02 */ IL_0012: beq.s IL_0016290 291 /* 0x000003F0 2B25 */ IL_0014: br.s IL_003B292 293 /* 0x000003F2 00 */ IL_0016: nop294 .try295 {296 /* 0x000003F3 06 */ IL_0017: ldloc.0297 /* 0x000003F4 1FFC */ IL_0018: ldc.i4.s -4298 /* 0x000003F6 2E08 */ IL_001A: beq.s IL_0024299 300 /* 0x000003F8 2B00 */ IL_001C: br.s IL_001E301 302 /* 0x000003FA 06 */ IL_001E: ldloc.0303 /* 0x000003FB 17 */ IL_001F: ldc.i4.1304 /* 0x000003FC 2E02 */ IL_0020: beq.s IL_0024305 306 /* 0x000003FE 2B0C */ IL_0022: br.s IL_0030307 308 /* 0x00000400 00 */ IL_0024: nop309 .try310 {311 /* 0x00000401 DE07 */ IL_0025: leave.s IL_002E312 } // end .try313 finally314 {315 /* 0x00000403 02 */ IL_0027: ldarg.0316 /* 0x00000404 280D000006 */ IL_0028: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally2'()317 /* 0x00000409 DC */ IL_002D: endfinally318 } // end handler319 320 /* 0x0000040A 2B00 */ IL_002E: br.s IL_0030321 322 /* 0x0000040C DE07 */ IL_0030: leave.s IL_0039323 } // end .try324 finally325 {326 /* 0x0000040E 02 */ IL_0032: ldarg.0327 /* 0x0000040F 280C000006 */ IL_0033: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally1'()328 /* 0x00000414 DC */ IL_0038: endfinally329 } // end handler330 331 /* 0x00000415 2B00 */ IL_0039: br.s IL_003B332 333 /* 0x00000417 2A */ IL_003B: ret334 } // end of method '<CreateCollection>d__1'::System.IDisposable.Dispose335 336 // Token: 0x0600000B RID: 11 RVA: 0x00002234 File Offset: 0x00000434337 .method private final hidebysig newslot virtual 338 instance bool MoveNext () cil managed 339 {340 .override method instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()341 // Header Size: 12 bytes342 // Code Size: 397 (0x18D) bytes343 // LocalVarSig Token: 0x11000004 RID: 4344 .maxstack 3345 .locals init (346 [0] bool,347 [1] int32348 )349 350 .try351 {352 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */353 /* 0x00000440 02 */ IL_0000: ldarg.0354 /* 0x00000441 7B05000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'355 /* 0x00000446 0B */ IL_0006: stloc.1356 /* 0x00000447 07 */ IL_0007: ldloc.1357 /* 0x00000448 2C08 */ IL_0008: brfalse.s IL_0012358 359 /* 0x0000044A 2B00 */ IL_000A: br.s IL_000C360 361 /* 0x0000044C 07 */ IL_000C: ldloc.1362 /* 0x0000044D 17 */ IL_000D: ldc.i4.1363 /* 0x0000044E 2E04 */ IL_000E: beq.s IL_0014364 365 /* 0x00000450 2B07 */ IL_0010: br.s IL_0019366 367 /* 0x00000452 2B0C */ IL_0012: br.s IL_0020368 369 /* 0x00000454 382C010000 */ IL_0014: br IL_0145370 371 /* 0x00000459 16 */ IL_0019: ldc.i4.0372 /* 0x0000045A 0A */ IL_001A: stloc.0373 /* 0x0000045B DD6B010000 */ IL_001B: leave IL_018B374 375 /* 0x00000460 02 */ IL_0020: ldarg.0376 /* 0x00000461 15 */ IL_0021: ldc.i4.m1377 /* 0x00000462 7D05000004 */ IL_0022: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'378 /* (24,9)-(24,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */379 /* 0x00000467 00 */ IL_0027: nop380 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */381 /* 0x00000468 02 */ IL_0028: ldarg.0382 /* 0x00000469 7305000006 */ IL_0029: newobj instance void ConsoleApp1.Program/'<>c__DisplayClass1_0'::.ctor()383 /* 0x0000046E 7D08000004 */ IL_002E: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'384 /* (25,20)-(25,92) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */385 /* 0x00000473 02 */ IL_0033: ldarg.0386 /* 0x00000474 7B08000004 */ IL_0034: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'387 /* 0x00000479 732400000A */ IL_0039: newobj instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::.ctor()388 /* 0x0000047E 7D02000004 */ IL_003E: stfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection389 /* 0x00000483 02 */ IL_0043: ldarg.0390 /* 0x00000484 1FFD */ IL_0044: ldc.i4.s -3391 /* 0x00000486 7D05000004 */ IL_0046: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'392 /* (26,13)-(26,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */393 /* 0x0000048B 00 */ IL_004B: nop394 /* (27,17)-(27,34) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */395 /* 0x0000048C 02 */ IL_004C: ldarg.0396 /* 0x0000048D 7E01000004 */ IL_004D: ldsfld object ConsoleApp1.Program::globalLock397 /* 0x00000492 7D09000004 */ IL_0052: stfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2'398 /* 0x00000497 02 */ IL_0057: ldarg.0399 /* 0x00000498 16 */ IL_0058: ldc.i4.0400 /* 0x00000499 7D0A000004 */ IL_0059: stfld bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3'401 .try402 {403 /* 0x0000049E 02 */ IL_005E: ldarg.0404 /* 0x0000049F 7B09000004 */ IL_005F: ldfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2'405 /* 0x000004A4 02 */ IL_0064: ldarg.0406 /* 0x000004A5 7C0A000004 */ IL_0065: ldflda bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3'407 /* 0x000004AA 281B00000A */ IL_006A: call void [mscorlib]System.Threading.Monitor::Enter(object, bool&)408 /* 0x000004AF 00 */ IL_006F: nop409 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */410 /* 0x000004B0 02 */ IL_0070: ldarg.0411 /* 0x000004B1 7307000006 */ IL_0071: newobj instance void ConsoleApp1.Program/'<>c__DisplayClass1_1'::.ctor()412 /* 0x000004B6 7D0B000004 */ IL_0076: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'413 /* 0x000004BB 02 */ IL_007B: ldarg.0414 /* 0x000004BC 7B0B000004 */ IL_007C: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'415 /* 0x000004C1 02 */ IL_0081: ldarg.0416 /* 0x000004C2 7B08000004 */ IL_0082: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'417 /* 0x000004C7 7D04000004 */ IL_0087: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1'418 /* (28,17)-(28,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */419 /* 0x000004CC 00 */ IL_008C: nop420 /* (29,21)-(29,42) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */421 /* 0x000004CD 02 */ IL_008D: ldarg.0422 /* 0x000004CE 7B0B000004 */ IL_008E: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'423 /* 0x000004D3 14 */ IL_0093: ldnull424 /* 0x000004D4 7D03000004 */ IL_0094: stfld class [mscorlib]System.Exception ConsoleApp1.Program/'<>c__DisplayClass1_1'::err425 /* (30,21)-(47,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */426 /* 0x000004D9 282500000A */ IL_0099: call class [mscorlib]System.Threading.Tasks.TaskFactory [mscorlib]System.Threading.Tasks.Task::get_Factory()427 /* 0x000004DE 02 */ IL_009E: ldarg.0428 /* 0x000004DF 7B0B000004 */ IL_009F: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'429 /* 0x000004E4 7B04000004 */ IL_00A4: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1'430 /* 0x000004E9 FE0606000006 */ IL_00A9: ldftn instance void ConsoleApp1.Program/'<>c__DisplayClass1_0'::'<CreateCollection>b__0'()431 /* 0x000004EF 732600000A */ IL_00AF: newobj instance void [mscorlib]System.Action::.ctor(object, native int)432 /* 0x000004F4 6F2700000A */ IL_00B4: callvirt instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Threading.Tasks.TaskFactory::StartNew(class [mscorlib]System.Action)433 /* 0x000004F9 02 */ IL_00B9: ldarg.0434 /* 0x000004FA 7B0B000004 */ IL_00BA: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'435 /* 0x000004FF FE0608000006 */ IL_00BF: ldftn instance void ConsoleApp1.Program/'<>c__DisplayClass1_1'::'<CreateCollection>b__1'(class [mscorlib]System.Threading.Tasks.Task)436 /* 0x00000505 732800000A */ IL_00C5: newobj instance void class [mscorlib]System.Action`1<class [mscorlib]System.Threading.Tasks.Task>::.ctor(object, native int)437 /* 0x0000050A 6F2900000A */ IL_00CA: callvirt instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Threading.Tasks.Task::ContinueWith(class [mscorlib]System.Action`1<class [mscorlib]System.Threading.Tasks.Task>)438 /* 0x0000050F 26 */ IL_00CF: pop439 /* (48,17)-(48,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */440 /* 0x00000510 00 */ IL_00D0: nop441 /* 0x00000511 02 */ IL_00D1: ldarg.0442 /* 0x00000512 14 */ IL_00D2: ldnull443 /* 0x00000513 7D0B000004 */ IL_00D3: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'444 /* 0x00000518 DE15 */ IL_00D8: leave.s IL_00EF445 } // end .try446 finally447 {448 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */449 /* 0x0000051A 02 */ IL_00DA: ldarg.0450 /* 0x0000051B 7B0A000004 */ IL_00DB: ldfld bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3'451 /* 0x00000520 2C0C */ IL_00E0: brfalse.s IL_00EE452 453 /* 0x00000522 02 */ IL_00E2: ldarg.0454 /* 0x00000523 7B09000004 */ IL_00E3: ldfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2'455 /* 0x00000528 281F00000A */ IL_00E8: call void [mscorlib]System.Threading.Monitor::Exit(object)456 /* 0x0000052D 00 */ IL_00ED: nop457 458 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */459 /* 0x0000052E DC */ IL_00EE: endfinally460 } // end handler461 462 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */463 /* 0x0000052F 02 */ IL_00EF: ldarg.0464 /* 0x00000530 14 */ IL_00F0: ldnull465 /* 0x00000531 7D09000004 */ IL_00F1: stfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2'466 /* (50,17)-(50,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */467 /* 0x00000536 00 */ IL_00F6: nop468 /* (50,41)-(50,76) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */469 /* 0x00000537 02 */ IL_00F7: ldarg.0470 /* 0x00000538 02 */ IL_00F8: ldarg.0471 /* 0x00000539 7B08000004 */ IL_00F9: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'472 /* 0x0000053E 7B02000004 */ IL_00FE: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection473 /* 0x00000543 6F2A00000A */ IL_0103: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1<!0> class [System]System.Collections.Concurrent.BlockingCollection`1<string>::GetConsumingEnumerable()474 /* 0x00000548 6F1500000A */ IL_0108: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator()475 /* 0x0000054D 7D0C000004 */ IL_010D: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5'476 /* 0x00000552 02 */ IL_0112: ldarg.0477 /* 0x00000553 1FFC */ IL_0113: ldc.i4.s -4478 /* 0x00000555 7D05000004 */ IL_0115: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'479 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */480 /* 0x0000055A 2B39 */ IL_011A: br.s IL_0155481 482 /* (50,26)-(50,37) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */483 /* 0x0000055C 02 */ IL_011C: ldarg.0484 /* 0x0000055D 02 */ IL_011D: ldarg.0485 /* 0x0000055E 7B0C000004 */ IL_011E: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5'486 /* 0x00000563 6F1200000A */ IL_0123: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current()487 /* 0x00000568 7D0D000004 */ IL_0128: stfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<item>5__6'488 /* (51,17)-(51,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */489 /* 0x0000056D 00 */ IL_012D: nop490 /* (52,21)-(52,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */491 /* 0x0000056E 02 */ IL_012E: ldarg.0492 /* 0x0000056F 02 */ IL_012F: ldarg.0493 /* 0x00000570 7B0D000004 */ IL_0130: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<item>5__6'494 /* 0x00000575 7D06000004 */ IL_0135: stfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current'495 /* 0x0000057A 02 */ IL_013A: ldarg.0496 /* 0x0000057B 17 */ IL_013B: ldc.i4.1497 /* 0x0000057C 7D05000004 */ IL_013C: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'498 /* 0x00000581 17 */ IL_0141: ldc.i4.1499 /* 0x00000582 0A */ IL_0142: stloc.0500 /* 0x00000583 DE46 */ IL_0143: leave.s IL_018B501 502 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */503 /* 0x00000585 02 */ IL_0145: ldarg.0504 /* 0x00000586 1FFC */ IL_0146: ldc.i4.s -4505 /* 0x00000588 7D05000004 */ IL_0148: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'506 /* (53,17)-(53,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */507 /* 0x0000058D 00 */ IL_014D: nop508 /* 0x0000058E 02 */ IL_014E: ldarg.0509 /* 0x0000058F 14 */ IL_014F: ldnull510 /* 0x00000590 7D0D000004 */ IL_0150: stfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<item>5__6'511 512 /* (50,38)-(50,40) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */513 /* 0x00000595 02 */ IL_0155: ldarg.0514 /* 0x00000596 7B0C000004 */ IL_0156: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5'515 /* 0x0000059B 6F1100000A */ IL_015B: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()516 /* 0x000005A0 2DBA */ IL_0160: brtrue.s IL_011C517 518 /* 0x000005A2 02 */ IL_0162: ldarg.0519 /* 0x000005A3 280D000006 */ IL_0163: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally2'()520 /* 0x000005A8 00 */ IL_0168: nop521 /* 0x000005A9 02 */ IL_0169: ldarg.0522 /* 0x000005AA 14 */ IL_016A: ldnull523 /* 0x000005AB 7D0C000004 */ IL_016B: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5'524 /* (54,13)-(54,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */525 /* 0x000005B0 00 */ IL_0170: nop526 /* 0x000005B1 02 */ IL_0171: ldarg.0527 /* 0x000005B2 280C000006 */ IL_0172: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally1'()528 /* 0x000005B7 00 */ IL_0177: nop529 /* 0x000005B8 02 */ IL_0178: ldarg.0530 /* 0x000005B9 14 */ IL_0179: ldnull531 /* 0x000005BA 7D08000004 */ IL_017A: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'532 /* (55,9)-(55,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */533 /* 0x000005BF 16 */ IL_017F: ldc.i4.0534 /* 0x000005C0 0A */ IL_0180: stloc.0535 /* 0x000005C1 DE08 */ IL_0181: leave.s IL_018B536 } // end .try537 fault538 {539 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */540 /* 0x000005C3 02 */ IL_0183: ldarg.0541 /* 0x000005C4 280A000006 */ IL_0184: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::System.IDisposable.Dispose()542 /* 0x000005C9 00 */ IL_0189: nop543 /* 0x000005CA DC */ IL_018A: endfinally544 } // end handler545 546 /* 0x000005CB 06 */ IL_018B: ldloc.0547 /* 0x000005CC 2A */ IL_018C: ret548 } // end of method '<CreateCollection>d__1'::MoveNext549 550 // Token: 0x0600000C RID: 12 RVA: 0x00002404 File Offset: 0x00000604551 .method private hidebysig 552 instance void '<>m__Finally1' () cil managed 553 {554 // Header Size: 1 byte555 // Code Size: 38 (0x26) bytes556 .maxstack 8557 558 /* 0x00000605 02 */ IL_0000: ldarg.0559 /* 0x00000606 15 */ IL_0001: ldc.i4.m1560 /* 0x00000607 7D05000004 */ IL_0002: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'561 /* 0x0000060C 02 */ IL_0007: ldarg.0562 /* 0x0000060D 7B08000004 */ IL_0008: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'563 /* 0x00000612 7B02000004 */ IL_000D: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection564 /* 0x00000617 2C11 */ IL_0012: brfalse.s IL_0025565 566 /* 0x00000619 02 */ IL_0014: ldarg.0567 /* 0x0000061A 7B08000004 */ IL_0015: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1'568 /* 0x0000061F 7B02000004 */ IL_001A: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection569 /* 0x00000624 6F1000000A */ IL_001F: callvirt instance void [mscorlib]System.IDisposable::Dispose()570 /* 0x00000629 00 */ IL_0024: nop571 572 /* 0x0000062A 2A */ IL_0025: ret573 } // end of method '<CreateCollection>d__1'::'<>m__Finally1'574 575 // Token: 0x0600000D RID: 13 RVA: 0x0000242B File Offset: 0x0000062B576 .method private hidebysig 577 instance void '<>m__Finally2' () cil managed 578 {579 // Header Size: 1 byte580 // Code Size: 29 (0x1D) bytes581 .maxstack 8582 583 /* 0x0000062C 02 */ IL_0000: ldarg.0584 /* 0x0000062D 1FFD */ IL_0001: ldc.i4.s -3585 /* 0x0000062F 7D05000004 */ IL_0003: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'586 /* 0x00000634 02 */ IL_0008: ldarg.0587 /* 0x00000635 7B0C000004 */ IL_0009: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5'588 /* 0x0000063A 2C0C */ IL_000E: brfalse.s IL_001C589 590 /* 0x0000063C 02 */ IL_0010: ldarg.0591 /* 0x0000063D 7B0C000004 */ IL_0011: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5'592 /* 0x00000642 6F1000000A */ IL_0016: callvirt instance void [mscorlib]System.IDisposable::Dispose()593 /* 0x00000647 00 */ IL_001B: nop594 595 /* 0x00000648 2A */ IL_001C: ret596 } // end of method '<CreateCollection>d__1'::'<>m__Finally2'597 598 // Token: 0x0600000E RID: 14 RVA: 0x00002449 File Offset: 0x00000649599 .method private final hidebysig specialname newslot virtual 600 instance string 'System.Collections.Generic.IEnumerator<System.String>.get_Current' () cil managed 601 {602 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (603 01 00 00 00604 )605 .override method instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current()606 // Header Size: 1 byte607 // Code Size: 7 (0x7) bytes608 .maxstack 8609 610 /* 0x0000064A 02 */ IL_0000: ldarg.0611 /* 0x0000064B 7B06000004 */ IL_0001: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current'612 /* 0x00000650 2A */ IL_0006: ret613 } // end of method '<CreateCollection>d__1'::'System.Collections.Generic.IEnumerator<System.String>.get_Current'614 615 // Token: 0x0600000F RID: 15 RVA: 0x00002451 File Offset: 0x00000651616 .method private final hidebysig newslot virtual 617 instance void System.Collections.IEnumerator.Reset () cil managed 618 {619 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (620 01 00 00 00621 )622 .override method instance void [mscorlib]System.Collections.IEnumerator::Reset()623 // Header Size: 1 byte624 // Code Size: 6 (0x6) bytes625 .maxstack 8626 627 /* 0x00000652 732B00000A */ IL_0000: newobj instance void [mscorlib]System.NotSupportedException::.ctor()628 /* 0x00000657 7A */ IL_0005: throw629 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerator.Reset630 631 // Token: 0x06000010 RID: 16 RVA: 0x00002458 File Offset: 0x00000658632 .method private final hidebysig specialname newslot virtual 633 instance object System.Collections.IEnumerator.get_Current () cil managed 634 {635 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (636 01 00 00 00637 )638 .override method instance object [mscorlib]System.Collections.IEnumerator::get_Current()639 // Header Size: 1 byte640 // Code Size: 7 (0x7) bytes641 .maxstack 8642 643 /* 0x00000659 02 */ IL_0000: ldarg.0644 /* 0x0000065A 7B06000004 */ IL_0001: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current'645 /* 0x0000065F 2A */ IL_0006: ret646 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerator.get_Current647 648 // Token: 0x06000011 RID: 17 RVA: 0x00002460 File Offset: 0x00000660649 .method private final hidebysig newslot virtual 650 instance class [mscorlib]System.Collections.Generic.IEnumerator`1<string> 'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator' () cil managed 651 {652 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (653 01 00 00 00654 )655 .override method instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator()656 // Header Size: 12 bytes657 // Code Size: 48 (0x30) bytes658 // LocalVarSig Token: 0x11000005 RID: 5659 .maxstack 2660 .locals init (661 [0] class ConsoleApp1.Program/'<CreateCollection>d__1'662 )663 664 /* 0x0000066C 02 */ IL_0000: ldarg.0665 /* 0x0000066D 7B05000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'666 /* 0x00000672 1FFE */ IL_0006: ldc.i4.s -2667 /* 0x00000674 331D */ IL_0008: bne.un.s IL_0027668 669 /* 0x00000676 02 */ IL_000A: ldarg.0670 /* 0x00000677 7B07000004 */ IL_000B: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>l__initialThreadId'671 /* 0x0000067C 282200000A */ IL_0010: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread()672 /* 0x00000681 6F2300000A */ IL_0015: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId()673 /* 0x00000686 330B */ IL_001A: bne.un.s IL_0027674 675 /* 0x00000688 02 */ IL_001C: ldarg.0676 /* 0x00000689 16 */ IL_001D: ldc.i4.0677 /* 0x0000068A 7D05000004 */ IL_001E: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'678 /* 0x0000068F 02 */ IL_0023: ldarg.0679 /* 0x00000690 0A */ IL_0024: stloc.0680 /* 0x00000691 2B07 */ IL_0025: br.s IL_002E681 682 /* 0x00000693 16 */ IL_0027: ldc.i4.0683 /* 0x00000694 7309000006 */ IL_0028: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32)684 /* 0x00000699 0A */ IL_002D: stloc.0685 686 /* 0x0000069A 06 */ IL_002E: ldloc.0687 /* 0x0000069B 2A */ IL_002F: ret688 } // end of method '<CreateCollection>d__1'::'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator'689 690 // Token: 0x06000012 RID: 18 RVA: 0x0000249C File Offset: 0x0000069C691 .method private final hidebysig newslot virtual 692 instance class [mscorlib]System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () cil managed 693 {694 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (695 01 00 00 00696 )697 .override method instance class [mscorlib]System.Collections.IEnumerator [mscorlib]System.Collections.IEnumerable::GetEnumerator()698 // Header Size: 1 byte699 // Code Size: 7 (0x7) bytes700 .maxstack 8701 702 /* 0x0000069D 02 */ IL_0000: ldarg.0703 /* 0x0000069E 2811000006 */ IL_0001: call instance class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator'()704 /* 0x000006A3 2A */ IL_0006: ret705 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerable.GetEnumerator706 707 // Properties708 // Token: 0x17000001 RID: 1709 .property instance string 'System.Collections.Generic.IEnumerator<System.String>.Current'()710 {711 // Token: 0x0600000E RID: 14 RVA: 0x00002449 File Offset: 0x00000649712 .get instance string ConsoleApp1.Program/'<CreateCollection>d__1'::'System.Collections.Generic.IEnumerator<System.String>.get_Current'()713 }714 // Token: 0x17000002 RID: 2715 .property instance object System.Collections.IEnumerator.Current()716 {717 // Token: 0x06000010 RID: 16 RVA: 0x00002458 File Offset: 0x00000658718 .get instance object ConsoleApp1.Program/'<CreateCollection>d__1'::System.Collections.IEnumerator.get_Current()719 }720 721 } // end of class <CreateCollection>d__1722 723 724 // Fields725 // Token: 0x04000001 RID: 1726 .field private static initonly object globalLock727 728 // Methods729 // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250730 .method private hidebysig static 731 void Main (732 string[] args733 ) cil managed 734 {735 // Header Size: 12 bytes736 // Code Size: 67 (0x43) bytes737 // LocalVarSig Token: 0x11000001 RID: 1738 .maxstack 2739 .entrypoint740 .locals init (741 [0] class [mscorlib]System.Collections.Generic.IEnumerable`1<string> coll,742 [1] class [mscorlib]System.Collections.Generic.IEnumerator`1<string>,743 [2] string str744 )745 746 /* (13,9)-(13,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */747 /* 0x0000025C 00 */ IL_0000: nop748 /* (14,13)-(14,59) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */749 /* 0x0000025D 2802000006 */ IL_0001: call class [mscorlib]System.Collections.Generic.IEnumerable`1<string> ConsoleApp1.Program::CreateCollection()750 /* 0x00000262 0A */ IL_0006: stloc.0751 /* (15,13)-(15,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */752 /* 0x00000263 00 */ IL_0007: nop753 /* (16,17)-(16,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */754 /* 0x00000264 00 */ IL_0008: nop755 /* (16,40)-(16,44) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */756 /* 0x00000265 06 */ IL_0009: ldloc.0757 /* 0x00000266 6F1500000A */ IL_000A: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator()758 /* 0x0000026B 0B */ IL_000F: stloc.1759 .try760 {761 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */762 /* 0x0000026C 2B1A */ IL_0010: br.s IL_002C763 // loop start (head: IL_002C)764 /* (16,26)-(16,36) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */765 /* 0x0000026E 07 */ IL_0012: ldloc.1766 /* 0x0000026F 6F1200000A */ IL_0013: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current()767 /* 0x00000274 0C */ IL_0018: stloc.2768 /* (17,17)-(17,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */769 /* 0x00000275 00 */ IL_0019: nop770 /* (18,21)-(18,55) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */771 /* 0x00000276 7201000070 */ IL_001A: ldstr "read: "772 /* 0x0000027B 08 */ IL_001F: ldloc.2773 /* 0x0000027C 281800000A */ IL_0020: call string [mscorlib]System.String::Concat(string, string)774 /* 0x00000281 281900000A */ IL_0025: call void [mscorlib]System.Console::WriteLine(string)775 /* 0x00000286 00 */ IL_002A: nop776 /* (19,17)-(19,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */777 /* 0x00000287 00 */ IL_002B: nop778 779 /* (16,37)-(16,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */780 /* 0x00000288 07 */ IL_002C: ldloc.1781 /* 0x00000289 6F1100000A */ IL_002D: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()782 /* 0x0000028E 2DDE */ IL_0032: brtrue.s IL_0012783 // end loop784 785 /* 0x00000290 DE0B */ IL_0034: leave.s IL_0041786 } // end .try787 finally788 {789 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */790 /* 0x00000292 07 */ IL_0036: ldloc.1791 /* 0x00000293 2C07 */ IL_0037: brfalse.s IL_0040792 793 /* 0x00000295 07 */ IL_0039: ldloc.1794 /* 0x00000296 6F1000000A */ IL_003A: callvirt instance void [mscorlib]System.IDisposable::Dispose()795 /* 0x0000029B 00 */ IL_003F: nop796 797 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */798 /* 0x0000029C DC */ IL_0040: endfinally799 } // end handler800 801 /* (20,13)-(20,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */802 /* 0x0000029D 00 */ IL_0041: nop803 /* (21,9)-(21,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */804 /* 0x0000029E 2A */ IL_0042: ret805 } // end of method Program::Main806 807 // Token: 0x06000002 RID: 2 RVA: 0x000020B0 File Offset: 0x000002B0808 .method private hidebysig static 809 class [mscorlib]System.Collections.Generic.IEnumerable`1<string> CreateCollection () cil managed 810 {811 // Header Size: 1 byte812 // Code Size: 8 (0x8) bytes813 .maxstack 8814 815 /* 0x000002B1 1FFE */ IL_0000: ldc.i4.s -2816 /* 0x000002B3 7309000006 */ IL_0002: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32)817 /* 0x000002B8 2A */ IL_0007: ret818 } // end of method Program::CreateCollection819 820 // Token: 0x06000003 RID: 3 RVA: 0x000020B9 File Offset: 0x000002B9821 .method public hidebysig specialname rtspecialname 822 instance void .ctor () cil managed 823 {824 // Header Size: 1 byte825 // Code Size: 8 (0x8) bytes826 .maxstack 8827 828 /* 0x000002BA 02 */ IL_0000: ldarg.0829 /* 0x000002BB 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()830 /* 0x000002C0 00 */ IL_0006: nop831 /* 0x000002C1 2A */ IL_0007: ret832 } // end of method Program::.ctor833 834 // Token: 0x06000004 RID: 4 RVA: 0x000020C2 File Offset: 0x000002C2835 .method private hidebysig specialname rtspecialname static 836 void .cctor () cil managed 837 {838 // Header Size: 1 byte839 // Code Size: 11 (0xB) bytes840 .maxstack 8841 842 /* (58,9)-(58,66) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */843 /* 0x000002C3 731A00000A */ IL_0000: newobj instance void [mscorlib]System.Object::.ctor()844 /* 0x000002C8 8001000004 */ IL_0005: stsfld object ConsoleApp1.Program::globalLock845 /* 0x000002CD 2A */ IL_000A: ret846 } // end of method Program::.cctor847 848 } // end of class ConsoleApp1.Program
View Code
为了清晰显示其逻辑,对应IL,重写其逻辑如下:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 IEnumerable<string> coll = CreateCollection(); 6 IEnumerator<string> enumerator = coll.GetEnumerator(); 7 string str = null; 8 9 try 10 { 11 goto IL_002C; 12 IL_0012: 13 str = enumerator.Current; 14 15 Console.WriteLine(string.Concat("read: ", str)); 16 17 IL_002C: 18 if (enumerator.MoveNext()) 19 { 20 goto IL_0012; 21 } 22 } 23 finally 24 { 25 if (enumerator != null) 26 { 27 enumerator.Dispose(); 28 } 29 } 30 } 31 32 private static IEnumerable<string> CreateCollection() 33 { 34 return new CreateCollection_1(-2); 35 } 36 37 private static readonly object globalLock = new object(); 38 39 private class DisplayClass1_0 40 { 41 public BlockingCollection<string> collection; 42 43 public DisplayClass1_0() 44 { 45 46 } 47 48 public void CreateCollection() 49 { 50 object loc0 = Program.globalLock; 51 bool loc1 = false; 52 int i = 0; 53 string value; 54 bool arg4; 55 56 try 57 { 58 Monitor.Enter(loc0, ref loc1); 59 60 goto IL_0074; 61 IL_0017: 62 Thread.Sleep(100); 63 value = string.Format("value: {0}", i); 64 Console.WriteLine(string.Concat("write: ", value)); 65 collection.Add(string.Format("value: {0}", i)); 66 Console.WriteLine(string.Concat("end write: ", value)); 67 i = i + 1; 68 IL_0074: 69 arg4 = i < 10; 70 if (arg4) 71 { 72 goto IL_0017; 73 } 74 } 75 finally 76 { 77 if (loc1) 78 { 79 Monitor.Exit(loc0); 80 } 81 } 82 } 83 } 84 85 private class DisplayClass1_1 86 { 87 public Exception err; 88 public DisplayClass1_0 locals1; 89 90 public DisplayClass1_1() { } 91 92 public void CreateCollection(Task task) 93 { 94 locals1.collection.CompleteAdding(); 95 err = task.Exception; 96 } 97 } 98 99 private class CreateCollection_1100 : IEnumerable<string>,101 IEnumerable,102 IEnumerator<string>,103 IEnumerator,104 IDisposable105 {106 private int state;107 private string current;108 private int initialThreadId;109 110 private DisplayClass1_0 f8__1;111 112 private object s__2;113 private bool s__3;114 115 private DisplayClass1_1 f8__4;116 117 private IEnumerator<string> s__5;118 119 private string item5__6;120 121 public CreateCollection_1(int state)122 {123 this.state = state;124 this.initialThreadId125 = Thread.CurrentThread.ManagedThreadId;126 }127 128 void IDisposable.Dispose()129 {130 int loc_0 = this.state;131 if (loc_0 + 4 <= 1)132 {133 goto IL_0016;134 }135 if (loc_0 == 1)136 {137 return;138 }139 140 IL_0016:141 ;142 143 try144 {145 if (loc_0 == -4)146 {147 goto IL_0024;148 }149 150 if (loc_0 == 1)151 {152 goto IL_0024;153 }154 return;155 156 IL_0024:;157 158 try159 {160 }161 finally162 {163 this.m__Finally2();164 }165 }166 finally167 {168 this.m__Finally1();169 }170 }171 172 bool IEnumerator.MoveNext()173 {174 bool loc_0;175 int loc_1;176 177 try178 {179 loc_1 = this.state;180 if (loc_1 == 0)181 {182 goto IL_0012;183 }184 if (loc_1 == 1)185 {186 goto IL_0014;187 }188 goto IL_0019;189 190 IL_0012:;191 goto IL_0020;192 IL_0014:;193 goto IL_0145;194 IL_0019:;195 return false;196 IL_0020:;197 this.state = -1;198 this.f8__1 = new DisplayClass1_0();199 this.f8__1.collection = new BlockingCollection<string>();200 this.state = -3;201 this.s__2 = Program.globalLock;202 this.s__3 = false;203 204 try205 {206 Monitor.Enter(this.s__2, ref this.s__3);207 208 this.f8__4 = new DisplayClass1_1();209 this.f8__4.locals1 = this.f8__1;210 this.f8__4.err = null;211 212 Task.Factory.StartNew(new Action(this.f8__4.locals1.CreateCollection))213 .ContinueWith(new Action<Task>(this.f8__4.CreateCollection));214 215 this.f8__4 = null;216 }217 finally218 {219 if (this.s__3)220 {221 Monitor.Exit(this.s__2);222 }223 }224 225 this.s__2 = null;226 227 this.s__5 =228 this.f8__1229 .collection230 .GetConsumingEnumerable()231 .GetEnumerator();232 233 this.state = -4;234 235 goto IL_0155;236 IL_011C:237 this.item5__6 = this.s__5.Current;238 239 this.current = this.item5__6;240 241 this.state = 1;242 loc_0 = true;243 244 return loc_0;245 246 IL_0145:247 this.state = -4;248 this.item5__6 = null;249 IL_0155:250 if (this.s__5.MoveNext())251 {252 goto IL_011C;253 }254 255 this.m__Finally2();256 this.s__5 = null;257 258 this.m__Finally1();259 260 this.f8__1 = null;261 262 loc_0 = false;263 return loc_0;264 }265 finally266 {267 ((IDisposable)this).Dispose();268 }269 }270 271 private void m__Finally2()272 {273 this.state = -3;274 if (this.s__5 == null)275 {276 return;277 }278 279 this.s__5.Dispose();280 }281 282 private void m__Finally1()283 {284 this.state = -1;285 286 if (this.f8__1 == null || this.f8__1.collection == null)287 {288 return;289 }290 this.f8__1.collection.Dispose();291 }292 293 string IEnumerator<string>.Current294 {295 get296 {297 return this.current;298 }299 }300 301 void IEnumerator.Reset()302 {303 throw new NotSupportedException();304 }305 306 object IEnumerator.Current307 {308 get309 {310 return this.current;311 }312 }313 314 IEnumerator<string> IEnumerable<string>.GetEnumerator()315 {316 CreateCollection_1 createCollection = null;317 if (this.state != -2)318 {319 goto IL_0027;320 }321 322 if (this.initialThreadId != Thread.CurrentThread.ManagedThreadId)323 {324 goto IL_0027;325 }326 327 this.state = 0;328 createCollection = this;329 goto IL_002E;330 IL_0027:;331 createCollection = new CreateCollection_1(0);332 IL_002E:333 return createCollection;334 }335 336 IEnumerator IEnumerable.GetEnumerator()337 {338 return ((IEnumerable<string>)this).GetEnumerator();339 }340 }341 }
为了可以使之可以编译通过,修改了不合法的类名、变量名等,编译并运行的结果和源码一样,接下来就是仔细看其实现逻辑了。
对于Main方法,其逻辑即为通过方法 CreateCollection() 获取一个IEnumerable<string>对象,没啥好看的。
里查看 CreateCollection() 方法的实现,发现我们的逻辑都不见了,取而代之的是返回了一个 CreateCollection_1 对象实例,这就是我们的迭代器了。
1 private static IEnumerable<string> CreateCollection()2 {3 return new CreateCollection_1(-2);4 }
那么 CreateCollection_1 类都做了什么呢?
我们发现,该类分别实现了 IEnumerable<string>, IEnumerable, IEnumerator<string>, IEnumerator, IDisposable 共五个接口,并且创建了两个新的内部类,DisplayClass1_0 和 DisplayClass1_1,分别对应我们 Task 启动的线程逻辑。
我们看 CreateCollection_1.MoveNext() 方法和 DisplayClass1_0.CreateCollection()方法,发现两个方法均加了锁,而且 CreateCollection_1 类有线程校验。
但是我们的要求是 CreateCollection() 方法内代码同步,既然编译器会自动添加锁,那么将代码改为如下形式会怎么样呢?
class Program {public static void Main(string[] args) { Task.Factory.StartNew(() =>{ Console.WriteLine($"start ----------> {Thread.CurrentThread.ManagedThreadId}"); IEnumerable<string> coll = CreateCollection();foreach (string str in coll) { Console.WriteLine($"read [{Thread.CurrentThread.ManagedThreadId}]: {str}"); } }); Task.Factory.StartNew(() =>{ Console.WriteLine($"start ----------> {Thread.CurrentThread.ManagedThreadId}"); IEnumerable<string> coll = CreateCollection();foreach (string str in coll) { Console.WriteLine($"read [{Thread.CurrentThread.ManagedThreadId}]: {str}"); } }); Console.ReadKey(); }private static IEnumerable<string> CreateCollection() {using (BlockingCollection<string> collection = new BlockingCollection<string>()) {lock (globalLock) { Exception err = null; Task.Factory.StartNew(() =>{ Console.WriteLine("start new ...");for (int i = 0; i < 10; i++) { Thread.Sleep(100);string value = $"value: {i}"; Console.WriteLine($"[{Thread.CurrentThread.ManagedThreadId}] write: {value}"); collection.Add($"value: {i}"); Console.WriteLine($"[{Thread.CurrentThread.ManagedThreadId}] end write: {value}"); } }).ContinueWith((task) =>{ collection.CompleteAdding(); err = task.Exception; });foreach (string item in collection.GetConsumingEnumerable()) {yield return item; } } } }private static readonly object globalLock = new object(); }
运行结果如下:
结果看起来是正确的,那么靠谱吗?还是到IL里面查找答案:
1 // Token: 0x02000002 RID: 2 2 .class private auto ansi beforefieldinit ConsoleApp1.Program 3 extends [mscorlib]System.Object 4 { 5 // Nested Types 6 // Token: 0x02000003 RID: 3 7 .class nested private auto ansi sealed serializable beforefieldinit '<>c' 8 extends [mscorlib]System.Object 9 { 10 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 11 01 00 00 00 12 ) 13 // Fields 14 // Token: 0x04000002 RID: 2 15 .field public static initonly class ConsoleApp1.Program/'<>c' '<>9' 16 // Token: 0x04000003 RID: 3 17 .field public static class [mscorlib]System.Action '<>9__0_0' 18 // Token: 0x04000004 RID: 4 19 .field public static class [mscorlib]System.Action '<>9__0_1' 20 21 // Methods 22 // Token: 0x06000005 RID: 5 RVA: 0x000020D6 File Offset: 0x000002D6 23 .method private hidebysig specialname rtspecialname static 24 void .cctor () cil managed 25 { 26 // Header Size: 1 byte 27 // Code Size: 11 (0xB) bytes 28 .maxstack 8 29 30 /* 0x000002D7 7306000006 */ IL_0000: newobj instance void ConsoleApp1.Program/'<>c'::.ctor() 31 /* 0x000002DC 8002000004 */ IL_0005: stsfld class ConsoleApp1.Program/'<>c' ConsoleApp1.Program/'<>c'::'<>9' 32 /* 0x000002E1 2A */ IL_000A: ret 33 } // end of method '<>c'::.cctor 34 35 // Token: 0x06000006 RID: 6 RVA: 0x000020E2 File Offset: 0x000002E2 36 .method public hidebysig specialname rtspecialname 37 instance void .ctor () cil managed 38 { 39 // Header Size: 1 byte 40 // Code Size: 8 (0x8) bytes 41 .maxstack 8 42 43 /* 0x000002E3 02 */ IL_0000: ldarg.0 44 /* 0x000002E4 281C00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor() 45 /* 0x000002E9 00 */ IL_0006: nop 46 /* 0x000002EA 2A */ IL_0007: ret 47 } // end of method '<>c'::.ctor 48 49 // Token: 0x06000007 RID: 7 RVA: 0x000020EC File Offset: 0x000002EC 50 .method assembly hidebysig 51 instance void '<Main>b__0_0' () cil managed 52 { 53 // Header Size: 12 bytes 54 // Code Size: 111 (0x6F) bytes 55 // LocalVarSig Token: 0x11000001 RID: 1 56 .maxstack 3 57 .locals init ( 58 [0] class [mscorlib]System.Collections.Generic.IEnumerable`1<string> coll, 59 [1] class [mscorlib]System.Collections.Generic.IEnumerator`1<string>, 60 [2] string str 61 ) 62 63 /* (14,13)-(14,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 64 /* 0x000002F8 00 */ IL_0000: nop 65 /* (15,17)-(15,96) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 66 /* 0x000002F9 7201000070 */ IL_0001: ldstr "start ----------> {0}" 67 /* 0x000002FE 281D00000A */ IL_0006: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 68 /* 0x00000303 6F1E00000A */ IL_000B: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 69 /* 0x00000308 8C20000001 */ IL_0010: box [mscorlib]System.Int32 70 /* 0x0000030D 281F00000A */ IL_0015: call string [mscorlib]System.String::Format(string, object) 71 /* 0x00000312 282000000A */ IL_001A: call void [mscorlib]System.Console::WriteLine(string) 72 /* 0x00000317 00 */ IL_001F: nop 73 /* (16,17)-(16,63) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 74 /* 0x00000318 2802000006 */ IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1<string> ConsoleApp1.Program::CreateCollection() 75 /* 0x0000031D 0A */ IL_0025: stloc.0 76 /* (18,17)-(18,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 77 /* 0x0000031E 00 */ IL_0026: nop 78 /* (18,40)-(18,44) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 79 /* 0x0000031F 06 */ IL_0027: ldloc.0 80 /* 0x00000320 6F1500000A */ IL_0028: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator() 81 /* 0x00000325 0B */ IL_002D: stloc.1 82 .try 83 { 84 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 85 /* 0x00000326 2B29 */ IL_002E: br.s IL_0059 86 // loop start (head: IL_0059) 87 /* (18,26)-(18,36) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 88 /* 0x00000328 07 */ IL_0030: ldloc.1 89 /* 0x00000329 6F1200000A */ IL_0031: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current() 90 /* 0x0000032E 0C */ IL_0036: stloc.2 91 /* (19,17)-(19,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 92 /* 0x0000032F 00 */ IL_0037: nop 93 /* (20,21)-(20,96) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 94 /* 0x00000330 722D000070 */ IL_0038: ldstr "read [{0}]: {1}" 95 /* 0x00000335 281D00000A */ IL_003D: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 96 /* 0x0000033A 6F1E00000A */ IL_0042: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 97 /* 0x0000033F 8C20000001 */ IL_0047: box [mscorlib]System.Int32 98 /* 0x00000344 08 */ IL_004C: ldloc.2 99 /* 0x00000345 282100000A */ IL_004D: call string [mscorlib]System.String::Format(string, object, object) 100 /* 0x0000034A 282000000A */ IL_0052: call void [mscorlib]System.Console::WriteLine(string) 101 /* 0x0000034F 00 */ IL_0057: nop 102 /* (21,17)-(21,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 103 /* 0x00000350 00 */ IL_0058: nop 104 105 /* (18,37)-(18,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 106 /* 0x00000351 07 */ IL_0059: ldloc.1 107 /* 0x00000352 6F1100000A */ IL_005A: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() 108 /* 0x00000357 2DCF */ IL_005F: brtrue.s IL_0030 109 // end loop 110 111 /* 0x00000359 DE0B */ IL_0061: leave.s IL_006E 112 } // end .try 113 finally 114 { 115 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 116 /* 0x0000035B 07 */ IL_0063: ldloc.1 117 /* 0x0000035C 2C07 */ IL_0064: brfalse.s IL_006D 118 119 /* 0x0000035E 07 */ IL_0066: ldloc.1 120 /* 0x0000035F 6F1000000A */ IL_0067: callvirt instance void [mscorlib]System.IDisposable::Dispose() 121 /* 0x00000364 00 */ IL_006C: nop 122 123 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 124 /* 0x00000365 DC */ IL_006D: endfinally 125 } // end handler 126 127 /* (22,13)-(22,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 128 /* 0x00000366 2A */ IL_006E: ret 129 } // end of method '<>c'::'<Main>b__0_0' 130 131 // Token: 0x06000008 RID: 8 RVA: 0x00002178 File Offset: 0x00000378 132 .method assembly hidebysig 133 instance void '<Main>b__0_1' () cil managed 134 { 135 // Header Size: 12 bytes 136 // Code Size: 111 (0x6F) bytes 137 // LocalVarSig Token: 0x11000001 RID: 1 138 .maxstack 3 139 .locals init ( 140 [0] class [mscorlib]System.Collections.Generic.IEnumerable`1<string> coll, 141 [1] class [mscorlib]System.Collections.Generic.IEnumerator`1<string>, 142 [2] string str 143 ) 144 145 /* (25,13)-(25,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 146 /* 0x00000384 00 */ IL_0000: nop 147 /* (26,17)-(26,96) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 148 /* 0x00000385 7201000070 */ IL_0001: ldstr "start ----------> {0}" 149 /* 0x0000038A 281D00000A */ IL_0006: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 150 /* 0x0000038F 6F1E00000A */ IL_000B: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 151 /* 0x00000394 8C20000001 */ IL_0010: box [mscorlib]System.Int32 152 /* 0x00000399 281F00000A */ IL_0015: call string [mscorlib]System.String::Format(string, object) 153 /* 0x0000039E 282000000A */ IL_001A: call void [mscorlib]System.Console::WriteLine(string) 154 /* 0x000003A3 00 */ IL_001F: nop 155 /* (27,17)-(27,63) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 156 /* 0x000003A4 2802000006 */ IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1<string> ConsoleApp1.Program::CreateCollection() 157 /* 0x000003A9 0A */ IL_0025: stloc.0 158 /* (29,17)-(29,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 159 /* 0x000003AA 00 */ IL_0026: nop 160 /* (29,40)-(29,44) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 161 /* 0x000003AB 06 */ IL_0027: ldloc.0 162 /* 0x000003AC 6F1500000A */ IL_0028: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator() 163 /* 0x000003B1 0B */ IL_002D: stloc.1 164 .try 165 { 166 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 167 /* 0x000003B2 2B29 */ IL_002E: br.s IL_0059 168 // loop start (head: IL_0059) 169 /* (29,26)-(29,36) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 170 /* 0x000003B4 07 */ IL_0030: ldloc.1 171 /* 0x000003B5 6F1200000A */ IL_0031: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current() 172 /* 0x000003BA 0C */ IL_0036: stloc.2 173 /* (30,17)-(30,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 174 /* 0x000003BB 00 */ IL_0037: nop 175 /* (31,21)-(31,96) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 176 /* 0x000003BC 722D000070 */ IL_0038: ldstr "read [{0}]: {1}" 177 /* 0x000003C1 281D00000A */ IL_003D: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 178 /* 0x000003C6 6F1E00000A */ IL_0042: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 179 /* 0x000003CB 8C20000001 */ IL_0047: box [mscorlib]System.Int32 180 /* 0x000003D0 08 */ IL_004C: ldloc.2 181 /* 0x000003D1 282100000A */ IL_004D: call string [mscorlib]System.String::Format(string, object, object) 182 /* 0x000003D6 282000000A */ IL_0052: call void [mscorlib]System.Console::WriteLine(string) 183 /* 0x000003DB 00 */ IL_0057: nop 184 /* (32,17)-(32,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 185 /* 0x000003DC 00 */ IL_0058: nop 186 187 /* (29,37)-(29,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 188 /* 0x000003DD 07 */ IL_0059: ldloc.1 189 /* 0x000003DE 6F1100000A */ IL_005A: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() 190 /* 0x000003E3 2DCF */ IL_005F: brtrue.s IL_0030 191 // end loop 192 193 /* 0x000003E5 DE0B */ IL_0061: leave.s IL_006E 194 } // end .try 195 finally 196 { 197 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 198 /* 0x000003E7 07 */ IL_0063: ldloc.1 199 /* 0x000003E8 2C07 */ IL_0064: brfalse.s IL_006D 200 201 /* 0x000003EA 07 */ IL_0066: ldloc.1 202 /* 0x000003EB 6F1000000A */ IL_0067: callvirt instance void [mscorlib]System.IDisposable::Dispose() 203 /* 0x000003F0 00 */ IL_006C: nop 204 205 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 206 /* 0x000003F1 DC */ IL_006D: endfinally 207 } // end handler 208 209 /* (33,13)-(33,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 210 /* 0x000003F2 2A */ IL_006E: ret 211 } // end of method '<>c'::'<Main>b__0_1' 212 213 } // end of class <>c 214 215 // Token: 0x02000004 RID: 4 216 .class nested private auto ansi sealed beforefieldinit '<>c__DisplayClass1_0' 217 extends [mscorlib]System.Object 218 { 219 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 220 01 00 00 00 221 ) 222 // Fields 223 // Token: 0x04000005 RID: 5 224 .field public class [System]System.Collections.Concurrent.BlockingCollection`1<string> collection 225 226 // Methods 227 // Token: 0x06000009 RID: 9 RVA: 0x00002204 File Offset: 0x00000404 228 .method public hidebysig specialname rtspecialname 229 instance void .ctor () cil managed 230 { 231 // Header Size: 1 byte 232 // Code Size: 8 (0x8) bytes 233 .maxstack 8 234 235 /* 0x00000405 02 */ IL_0000: ldarg.0 236 /* 0x00000406 281C00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor() 237 /* 0x0000040B 00 */ IL_0006: nop 238 /* 0x0000040C 2A */ IL_0007: ret 239 } // end of method '<>c__DisplayClass1_0'::.ctor 240 241 // Token: 0x0600000A RID: 10 RVA: 0x00002210 File Offset: 0x00000410 242 .method assembly hidebysig 243 instance void '<CreateCollection>b__0' () cil managed 244 { 245 // Header Size: 12 bytes 246 // Code Size: 152 (0x98) bytes 247 // LocalVarSig Token: 0x11000002 RID: 2 248 .maxstack 3 249 .locals init ( 250 [0] int32 i, 251 [1] string 'value', 252 [2] bool 253 ) 254 255 /* (46,21)-(46,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 256 /* 0x0000041C 00 */ IL_0000: nop 257 /* (47,25)-(47,60) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 258 /* 0x0000041D 724D000070 */ IL_0001: ldstr "start new ..." 259 /* 0x00000422 282000000A */ IL_0006: call void [mscorlib]System.Console::WriteLine(string) 260 /* 0x00000427 00 */ IL_000B: nop 261 /* (48,30)-(48,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 262 /* 0x00000428 16 */ IL_000C: ldc.i4.0 263 /* 0x00000429 0A */ IL_000D: stloc.0 264 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 265 /* 0x0000042A 2B7B */ IL_000E: br.s IL_008B 266 // loop start (head: IL_008B) 267 /* (49,25)-(49,26) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 268 /* 0x0000042C 00 */ IL_0010: nop 269 /* (50,29)-(50,47) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 270 /* 0x0000042D 1F64 */ IL_0011: ldc.i4.s 100 271 /* 0x0000042F 282200000A */ IL_0013: call void [mscorlib]System.Threading.Thread::Sleep(int32) 272 /* 0x00000434 00 */ IL_0018: nop 273 /* (51,29)-(51,58) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 274 /* 0x00000435 7269000070 */ IL_0019: ldstr "value: {0}" 275 /* 0x0000043A 06 */ IL_001E: ldloc.0 276 /* 0x0000043B 8C20000001 */ IL_001F: box [mscorlib]System.Int32 277 /* 0x00000440 281F00000A */ IL_0024: call string [mscorlib]System.String::Format(string, object) 278 /* 0x00000445 0B */ IL_0029: stloc.1 279 /* (52,29)-(52,107) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 280 /* 0x00000446 727F000070 */ IL_002A: ldstr "[{0}] write: {1}" 281 /* 0x0000044B 281D00000A */ IL_002F: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 282 /* 0x00000450 6F1E00000A */ IL_0034: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 283 /* 0x00000455 8C20000001 */ IL_0039: box [mscorlib]System.Int32 284 /* 0x0000045A 07 */ IL_003E: ldloc.1 285 /* 0x0000045B 282100000A */ IL_003F: call string [mscorlib]System.String::Format(string, object, object) 286 /* 0x00000460 282000000A */ IL_0044: call void [mscorlib]System.Console::WriteLine(string) 287 /* 0x00000465 00 */ IL_0049: nop 288 /* (53,29)-(53,59) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 289 /* 0x00000466 02 */ IL_004A: ldarg.0 290 /* 0x00000467 7B05000004 */ IL_004B: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 291 /* 0x0000046C 7269000070 */ IL_0050: ldstr "value: {0}" 292 /* 0x00000471 06 */ IL_0055: ldloc.0 293 /* 0x00000472 8C20000001 */ IL_0056: box [mscorlib]System.Int32 294 /* 0x00000477 281F00000A */ IL_005B: call string [mscorlib]System.String::Format(string, object) 295 /* 0x0000047C 6F2300000A */ IL_0060: callvirt instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::Add(!0) 296 /* 0x00000481 00 */ IL_0065: nop 297 /* (54,29)-(54,111) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 298 /* 0x00000482 72A1000070 */ IL_0066: ldstr "[{0}] end write: {1}" 299 /* 0x00000487 281D00000A */ IL_006B: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 300 /* 0x0000048C 6F1E00000A */ IL_0070: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 301 /* 0x00000491 8C20000001 */ IL_0075: box [mscorlib]System.Int32 302 /* 0x00000496 07 */ IL_007A: ldloc.1 303 /* 0x00000497 282100000A */ IL_007B: call string [mscorlib]System.String::Format(string, object, object) 304 /* 0x0000049C 282000000A */ IL_0080: call void [mscorlib]System.Console::WriteLine(string) 305 /* 0x000004A1 00 */ IL_0085: nop 306 /* (55,25)-(55,26) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 307 /* 0x000004A2 00 */ IL_0086: nop 308 /* (48,49)-(48,52) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 309 /* 0x000004A3 06 */ IL_0087: ldloc.0 310 /* 0x000004A4 17 */ IL_0088: ldc.i4.1 311 /* 0x000004A5 58 */ IL_0089: add 312 /* 0x000004A6 0A */ IL_008A: stloc.0 313 314 /* (48,41)-(48,47) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 315 /* 0x000004A7 06 */ IL_008B: ldloc.0 316 /* 0x000004A8 1F0A */ IL_008C: ldc.i4.s 10 317 /* 0x000004AA FE04 */ IL_008E: clt 318 /* 0x000004AC 0C */ IL_0090: stloc.2 319 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 320 /* 0x000004AD 08 */ IL_0091: ldloc.2 321 /* 0x000004AE 3A79FFFFFF */ IL_0092: brtrue IL_0010 322 // end loop 323 324 /* (56,21)-(56,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 325 /* 0x000004B3 2A */ IL_0097: ret 326 } // end of method '<>c__DisplayClass1_0'::'<CreateCollection>b__0' 327 328 } // end of class <>c__DisplayClass1_0 329 330 // Token: 0x02000005 RID: 5 331 .class nested private auto ansi sealed beforefieldinit '<>c__DisplayClass1_1' 332 extends [mscorlib]System.Object 333 { 334 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 335 01 00 00 00 336 ) 337 // Fields 338 // Token: 0x04000006 RID: 6 339 .field public class [mscorlib]System.Exception err 340 // Token: 0x04000007 RID: 7 341 .field public class ConsoleApp1.Program/'<>c__DisplayClass1_0' 'CS$<>8__locals1' 342 343 // Methods 344 // Token: 0x0600000B RID: 11 RVA: 0x000022B4 File Offset: 0x000004B4 345 .method public hidebysig specialname rtspecialname 346 instance void .ctor () cil managed 347 { 348 // Header Size: 1 byte 349 // Code Size: 8 (0x8) bytes 350 .maxstack 8 351 352 /* 0x000004B5 02 */ IL_0000: ldarg.0 353 /* 0x000004B6 281C00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor() 354 /* 0x000004BB 00 */ IL_0006: nop 355 /* 0x000004BC 2A */ IL_0007: ret 356 } // end of method '<>c__DisplayClass1_1'::.ctor 357 358 // Token: 0x0600000C RID: 12 RVA: 0x000022BD File Offset: 0x000004BD 359 .method assembly hidebysig 360 instance void '<CreateCollection>b__1' ( 361 class [mscorlib]System.Threading.Tasks.Task task 362 ) cil managed 363 { 364 // Header Size: 1 byte 365 // Code Size: 31 (0x1F) bytes 366 .maxstack 8 367 368 /* (57,21)-(57,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 369 /* 0x000004BE 00 */ IL_0000: nop 370 /* (58,25)-(58,53) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 371 /* 0x000004BF 02 */ IL_0001: ldarg.0 372 /* 0x000004C0 7B07000004 */ IL_0002: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1' 373 /* 0x000004C5 7B05000004 */ IL_0007: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 374 /* 0x000004CA 6F2400000A */ IL_000C: callvirt instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::CompleteAdding() 375 /* 0x000004CF 00 */ IL_0011: nop 376 /* (59,25)-(59,46) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 377 /* 0x000004D0 02 */ IL_0012: ldarg.0 378 /* 0x000004D1 03 */ IL_0013: ldarg.1 379 /* 0x000004D2 6F2500000A */ IL_0014: callvirt instance class [mscorlib]System.AggregateException [mscorlib]System.Threading.Tasks.Task::get_Exception() 380 /* 0x000004D7 7D06000004 */ IL_0019: stfld class [mscorlib]System.Exception ConsoleApp1.Program/'<>c__DisplayClass1_1'::err 381 /* (60,21)-(60,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 382 /* 0x000004DC 2A */ IL_001E: ret 383 } // end of method '<>c__DisplayClass1_1'::'<CreateCollection>b__1' 384 385 } // end of class <>c__DisplayClass1_1 386 387 // Token: 0x02000006 RID: 6 388 .class nested private auto ansi sealed beforefieldinit '<CreateCollection>d__1' 389 extends [mscorlib]System.Object 390 implements class [mscorlib]System.Collections.Generic.IEnumerable`1<string>, 391 [mscorlib]System.Collections.IEnumerable, 392 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>, 393 [mscorlib]System.IDisposable, 394 [mscorlib]System.Collections.IEnumerator 395 { 396 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 397 01 00 00 00 398 ) 399 // Fields 400 // Token: 0x04000008 RID: 8 401 .field private int32 '<>1__state' 402 // Token: 0x04000009 RID: 9 403 .field private string '<>2__current' 404 // Token: 0x0400000A RID: 10 405 .field private int32 '<>l__initialThreadId' 406 // Token: 0x0400000B RID: 11 407 .field private class ConsoleApp1.Program/'<>c__DisplayClass1_0' '<>8__1' 408 // Token: 0x0400000C RID: 12 409 .field private object '<>s__2' 410 // Token: 0x0400000D RID: 13 411 .field private bool '<>s__3' 412 // Token: 0x0400000E RID: 14 413 .field private class ConsoleApp1.Program/'<>c__DisplayClass1_1' '<>8__4' 414 // Token: 0x0400000F RID: 15 415 .field private class [mscorlib]System.Collections.Generic.IEnumerator`1<string> '<>s__5' 416 // Token: 0x04000010 RID: 16 417 .field private string '<item>5__6' 418 419 // Methods 420 // Token: 0x0600000D RID: 13 RVA: 0x000022DD File Offset: 0x000004DD 421 .method public hidebysig specialname rtspecialname 422 instance void .ctor ( 423 int32 '<>1__state' 424 ) cil managed 425 { 426 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 427 01 00 00 00 428 ) 429 // Header Size: 1 byte 430 // Code Size: 31 (0x1F) bytes 431 .maxstack 8 432 433 /* 0x000004DE 02 */ IL_0000: ldarg.0 434 /* 0x000004DF 281C00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor() 435 /* 0x000004E4 00 */ IL_0006: nop 436 /* 0x000004E5 02 */ IL_0007: ldarg.0 437 /* 0x000004E6 03 */ IL_0008: ldarg.1 438 /* 0x000004E7 7D08000004 */ IL_0009: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 439 /* 0x000004EC 02 */ IL_000E: ldarg.0 440 /* 0x000004ED 281D00000A */ IL_000F: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 441 /* 0x000004F2 6F1E00000A */ IL_0014: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 442 /* 0x000004F7 7D0A000004 */ IL_0019: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>l__initialThreadId' 443 /* 0x000004FC 2A */ IL_001E: ret 444 } // end of method '<CreateCollection>d__1'::.ctor 445 446 // Token: 0x0600000E RID: 14 RVA: 0x00002300 File Offset: 0x00000500 447 .method private final hidebysig newslot virtual 448 instance void System.IDisposable.Dispose () cil managed 449 { 450 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 451 01 00 00 00 452 ) 453 .override method instance void [mscorlib]System.IDisposable::Dispose() 454 // Header Size: 12 bytes 455 // Code Size: 87 (0x57) bytes 456 // LocalVarSig Token: 0x11000003 RID: 3 457 .maxstack 2 458 .locals init ( 459 [0] int32 460 ) 461 462 /* 0x0000050C 02 */ IL_0000: ldarg.0 463 /* 0x0000050D 7B08000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 464 /* 0x00000512 0A */ IL_0006: stloc.0 465 /* 0x00000513 06 */ IL_0007: ldloc.0 466 /* 0x00000514 1FFB */ IL_0008: ldc.i4.s -5 467 /* 0x00000516 59 */ IL_000A: sub 468 /* 0x00000517 18 */ IL_000B: ldc.i4.2 469 /* 0x00000518 3608 */ IL_000C: ble.un.s IL_0016 470 471 /* 0x0000051A 2B00 */ IL_000E: br.s IL_0010 472 473 /* 0x0000051C 06 */ IL_0010: ldloc.0 474 /* 0x0000051D 17 */ IL_0011: ldc.i4.1 475 /* 0x0000051E 2E02 */ IL_0012: beq.s IL_0016 476 477 /* 0x00000520 2B40 */ IL_0014: br.s IL_0056 478 479 /* 0x00000522 00 */ IL_0016: nop 480 .try 481 { 482 /* 0x00000523 06 */ IL_0017: ldloc.0 483 /* 0x00000524 1FFB */ IL_0018: ldc.i4.s -5 484 /* 0x00000526 59 */ IL_001A: sub 485 /* 0x00000527 17 */ IL_001B: ldc.i4.1 486 /* 0x00000528 3608 */ IL_001C: ble.un.s IL_0026 487 488 /* 0x0000052A 2B00 */ IL_001E: br.s IL_0020 489 490 /* 0x0000052C 06 */ IL_0020: ldloc.0 491 /* 0x0000052D 17 */ IL_0021: ldc.i4.1 492 /* 0x0000052E 2E02 */ IL_0022: beq.s IL_0026 493 494 /* 0x00000530 2B25 */ IL_0024: br.s IL_004B 495 496 /* 0x00000532 00 */ IL_0026: nop 497 .try 498 { 499 /* 0x00000533 06 */ IL_0027: ldloc.0 500 /* 0x00000534 1FFB */ IL_0028: ldc.i4.s -5 501 /* 0x00000536 2E08 */ IL_002A: beq.s IL_0034 502 503 /* 0x00000538 2B00 */ IL_002C: br.s IL_002E 504 505 /* 0x0000053A 06 */ IL_002E: ldloc.0 506 /* 0x0000053B 17 */ IL_002F: ldc.i4.1 507 /* 0x0000053C 2E02 */ IL_0030: beq.s IL_0034 508 509 /* 0x0000053E 2B0C */ IL_0032: br.s IL_0040 510 511 /* 0x00000540 00 */ IL_0034: nop 512 .try 513 { 514 /* 0x00000541 DE07 */ IL_0035: leave.s IL_003E 515 } // end .try 516 finally 517 { 518 /* 0x00000543 02 */ IL_0037: ldarg.0 519 /* 0x00000544 2812000006 */ IL_0038: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally3'() 520 /* 0x00000549 DC */ IL_003D: endfinally 521 } // end handler 522 523 /* 0x0000054A 2B00 */ IL_003E: br.s IL_0040 524 525 /* 0x0000054C DE07 */ IL_0040: leave.s IL_0049 526 } // end .try 527 finally 528 { 529 /* 0x0000054E 02 */ IL_0042: ldarg.0 530 /* 0x0000054F 2811000006 */ IL_0043: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally2'() 531 /* 0x00000554 DC */ IL_0048: endfinally 532 } // end handler 533 534 /* 0x00000555 2B00 */ IL_0049: br.s IL_004B 535 536 /* 0x00000557 DE07 */ IL_004B: leave.s IL_0054 537 } // end .try 538 finally 539 { 540 /* 0x00000559 02 */ IL_004D: ldarg.0 541 /* 0x0000055A 2810000006 */ IL_004E: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally1'() 542 /* 0x0000055F DC */ IL_0053: endfinally 543 } // end handler 544 545 /* 0x00000560 2B00 */ IL_0054: br.s IL_0056 546 547 /* 0x00000562 2A */ IL_0056: ret 548 } // end of method '<CreateCollection>d__1'::System.IDisposable.Dispose 549 550 // Token: 0x0600000F RID: 15 RVA: 0x0000238C File Offset: 0x0000058C 551 .method private final hidebysig newslot virtual 552 instance bool MoveNext () cil managed 553 { 554 .override method instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() 555 // Header Size: 12 bytes 556 // Code Size: 394 (0x18A) bytes 557 // LocalVarSig Token: 0x11000004 RID: 4 558 .maxstack 3 559 .locals init ( 560 [0] bool, 561 [1] int32 562 ) 563 564 .try 565 { 566 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 567 /* 0x00000598 02 */ IL_0000: ldarg.0 568 /* 0x00000599 7B08000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 569 /* 0x0000059E 0B */ IL_0006: stloc.1 570 /* 0x0000059F 07 */ IL_0007: ldloc.1 571 /* 0x000005A0 2C08 */ IL_0008: brfalse.s IL_0012 572 573 /* 0x000005A2 2B00 */ IL_000A: br.s IL_000C 574 575 /* 0x000005A4 07 */ IL_000C: ldloc.1 576 /* 0x000005A5 17 */ IL_000D: ldc.i4.1 577 /* 0x000005A6 2E04 */ IL_000E: beq.s IL_0014 578 579 /* 0x000005A8 2B07 */ IL_0010: br.s IL_0019 580 581 /* 0x000005AA 2B0C */ IL_0012: br.s IL_0020 582 583 /* 0x000005AC 3813010000 */ IL_0014: br IL_012C 584 585 /* 0x000005B1 16 */ IL_0019: ldc.i4.0 586 /* 0x000005B2 0A */ IL_001A: stloc.0 587 /* 0x000005B3 DD68010000 */ IL_001B: leave IL_0188 588 589 /* 0x000005B8 02 */ IL_0020: ldarg.0 590 /* 0x000005B9 15 */ IL_0021: ldc.i4.m1 591 /* 0x000005BA 7D08000004 */ IL_0022: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 592 /* (39,9)-(39,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 593 /* 0x000005BF 00 */ IL_0027: nop 594 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 595 /* 0x000005C0 02 */ IL_0028: ldarg.0 596 /* 0x000005C1 7309000006 */ IL_0029: newobj instance void ConsoleApp1.Program/'<>c__DisplayClass1_0'::.ctor() 597 /* 0x000005C6 7D0B000004 */ IL_002E: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1' 598 /* (40,20)-(40,92) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 599 /* 0x000005CB 02 */ IL_0033: ldarg.0 600 /* 0x000005CC 7B0B000004 */ IL_0034: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1' 601 /* 0x000005D1 732600000A */ IL_0039: newobj instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::.ctor() 602 /* 0x000005D6 7D05000004 */ IL_003E: stfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 603 /* 0x000005DB 02 */ IL_0043: ldarg.0 604 /* 0x000005DC 1FFD */ IL_0044: ldc.i4.s -3 605 /* 0x000005DE 7D08000004 */ IL_0046: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 606 /* (41,13)-(41,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 607 /* 0x000005E3 00 */ IL_004B: nop 608 /* (42,17)-(42,34) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 609 /* 0x000005E4 02 */ IL_004C: ldarg.0 610 /* 0x000005E5 7E01000004 */ IL_004D: ldsfld object ConsoleApp1.Program::globalLock 611 /* 0x000005EA 7D0C000004 */ IL_0052: stfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2' 612 /* 0x000005EF 02 */ IL_0057: ldarg.0 613 /* 0x000005F0 16 */ IL_0058: ldc.i4.0 614 /* 0x000005F1 7D0D000004 */ IL_0059: stfld bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3' 615 /* 0x000005F6 02 */ IL_005E: ldarg.0 616 /* 0x000005F7 1FFC */ IL_005F: ldc.i4.s -4 617 /* 0x000005F9 7D08000004 */ IL_0061: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 618 /* 0x000005FE 02 */ IL_0066: ldarg.0 619 /* 0x000005FF 7B0C000004 */ IL_0067: ldfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2' 620 /* 0x00000604 02 */ IL_006C: ldarg.0 621 /* 0x00000605 7C0D000004 */ IL_006D: ldflda bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3' 622 /* 0x0000060A 282700000A */ IL_0072: call void [mscorlib]System.Threading.Monitor::Enter(object, bool&) 623 /* 0x0000060F 00 */ IL_0077: nop 624 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 625 /* 0x00000610 02 */ IL_0078: ldarg.0 626 /* 0x00000611 730B000006 */ IL_0079: newobj instance void ConsoleApp1.Program/'<>c__DisplayClass1_1'::.ctor() 627 /* 0x00000616 7D0E000004 */ IL_007E: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 628 /* 0x0000061B 02 */ IL_0083: ldarg.0 629 /* 0x0000061C 7B0E000004 */ IL_0084: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 630 /* 0x00000621 02 */ IL_0089: ldarg.0 631 /* 0x00000622 7B0B000004 */ IL_008A: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1' 632 /* 0x00000627 7D07000004 */ IL_008F: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1' 633 /* (43,17)-(43,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 634 /* 0x0000062C 00 */ IL_0094: nop 635 /* (44,21)-(44,42) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 636 /* 0x0000062D 02 */ IL_0095: ldarg.0 637 /* 0x0000062E 7B0E000004 */ IL_0096: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 638 /* 0x00000633 14 */ IL_009B: ldnull 639 /* 0x00000634 7D06000004 */ IL_009C: stfld class [mscorlib]System.Exception ConsoleApp1.Program/'<>c__DisplayClass1_1'::err 640 /* (45,21)-(60,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 641 /* 0x00000639 281800000A */ IL_00A1: call class [mscorlib]System.Threading.Tasks.TaskFactory [mscorlib]System.Threading.Tasks.Task::get_Factory() 642 /* 0x0000063E 02 */ IL_00A6: ldarg.0 643 /* 0x0000063F 7B0E000004 */ IL_00A7: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 644 /* 0x00000644 7B07000004 */ IL_00AC: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1' 645 /* 0x00000649 FE060A000006 */ IL_00B1: ldftn instance void ConsoleApp1.Program/'<>c__DisplayClass1_0'::'<CreateCollection>b__0'() 646 /* 0x0000064F 731900000A */ IL_00B7: newobj instance void [mscorlib]System.Action::.ctor(object, native int) 647 /* 0x00000654 6F1A00000A */ IL_00BC: callvirt instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Threading.Tasks.TaskFactory::StartNew(class [mscorlib]System.Action) 648 /* 0x00000659 02 */ IL_00C1: ldarg.0 649 /* 0x0000065A 7B0E000004 */ IL_00C2: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 650 /* 0x0000065F FE060C000006 */ IL_00C7: ldftn instance void ConsoleApp1.Program/'<>c__DisplayClass1_1'::'<CreateCollection>b__1'(class [mscorlib]System.Threading.Tasks.Task) 651 /* 0x00000665 732800000A */ IL_00CD: newobj instance void class [mscorlib]System.Action`1<class [mscorlib]System.Threading.Tasks.Task>::.ctor(object, native int) 652 /* 0x0000066A 6F2900000A */ IL_00D2: callvirt instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Threading.Tasks.Task::ContinueWith(class [mscorlib]System.Action`1<class [mscorlib]System.Threading.Tasks.Task>) 653 /* 0x0000066F 26 */ IL_00D7: pop 654 /* (62,21)-(62,28) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 655 /* 0x00000670 00 */ IL_00D8: nop 656 /* (62,45)-(62,80) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 657 /* 0x00000671 02 */ IL_00D9: ldarg.0 658 /* 0x00000672 02 */ IL_00DA: ldarg.0 659 /* 0x00000673 7B0E000004 */ IL_00DB: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 660 /* 0x00000678 7B07000004 */ IL_00E0: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<>c__DisplayClass1_1'::'CS$<>8__locals1' 661 /* 0x0000067D 7B05000004 */ IL_00E5: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 662 /* 0x00000682 6F2A00000A */ IL_00EA: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1<!0> class [System]System.Collections.Concurrent.BlockingCollection`1<string>::GetConsumingEnumerable() 663 /* 0x00000687 6F1500000A */ IL_00EF: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator() 664 /* 0x0000068C 7D0F000004 */ IL_00F4: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5' 665 /* 0x00000691 02 */ IL_00F9: ldarg.0 666 /* 0x00000692 1FFB */ IL_00FA: ldc.i4.s -5 667 /* 0x00000694 7D08000004 */ IL_00FC: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 668 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 669 /* 0x00000699 2B39 */ IL_0101: br.s IL_013C 670 671 /* (62,30)-(62,41) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 672 /* 0x0000069B 02 */ IL_0103: ldarg.0 673 /* 0x0000069C 02 */ IL_0104: ldarg.0 674 /* 0x0000069D 7B0F000004 */ IL_0105: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5' 675 /* 0x000006A2 6F1200000A */ IL_010A: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current() 676 /* 0x000006A7 7D10000004 */ IL_010F: stfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<item>5__6' 677 /* (63,21)-(63,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 678 /* 0x000006AC 00 */ IL_0114: nop 679 /* (64,25)-(64,43) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 680 /* 0x000006AD 02 */ IL_0115: ldarg.0 681 /* 0x000006AE 02 */ IL_0116: ldarg.0 682 /* 0x000006AF 7B10000004 */ IL_0117: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<item>5__6' 683 /* 0x000006B4 7D09000004 */ IL_011C: stfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current' 684 /* 0x000006B9 02 */ IL_0121: ldarg.0 685 /* 0x000006BA 17 */ IL_0122: ldc.i4.1 686 /* 0x000006BB 7D08000004 */ IL_0123: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 687 /* 0x000006C0 17 */ IL_0128: ldc.i4.1 688 /* 0x000006C1 0A */ IL_0129: stloc.0 689 /* 0x000006C2 DE5C */ IL_012A: leave.s IL_0188 690 691 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 692 /* 0x000006C4 02 */ IL_012C: ldarg.0 693 /* 0x000006C5 1FFB */ IL_012D: ldc.i4.s -5 694 /* 0x000006C7 7D08000004 */ IL_012F: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 695 /* (65,21)-(65,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 696 /* 0x000006CC 00 */ IL_0134: nop 697 /* 0x000006CD 02 */ IL_0135: ldarg.0 698 /* 0x000006CE 14 */ IL_0136: ldnull 699 /* 0x000006CF 7D10000004 */ IL_0137: stfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<item>5__6' 700 701 /* (62,42)-(62,44) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 702 /* 0x000006D4 02 */ IL_013C: ldarg.0 703 /* 0x000006D5 7B0F000004 */ IL_013D: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5' 704 /* 0x000006DA 6F1100000A */ IL_0142: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() 705 /* 0x000006DF 2DBA */ IL_0147: brtrue.s IL_0103 706 707 /* 0x000006E1 02 */ IL_0149: ldarg.0 708 /* 0x000006E2 2812000006 */ IL_014A: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally3'() 709 /* 0x000006E7 00 */ IL_014F: nop 710 /* 0x000006E8 02 */ IL_0150: ldarg.0 711 /* 0x000006E9 14 */ IL_0151: ldnull 712 /* 0x000006EA 7D0F000004 */ IL_0152: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5' 713 /* (66,17)-(66,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 714 /* 0x000006EF 00 */ IL_0157: nop 715 /* 0x000006F0 02 */ IL_0158: ldarg.0 716 /* 0x000006F1 14 */ IL_0159: ldnull 717 /* 0x000006F2 7D0E000004 */ IL_015A: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4' 718 /* 0x000006F7 02 */ IL_015F: ldarg.0 719 /* 0x000006F8 2811000006 */ IL_0160: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally2'() 720 /* 0x000006FD 00 */ IL_0165: nop 721 /* 0x000006FE 02 */ IL_0166: ldarg.0 722 /* 0x000006FF 14 */ IL_0167: ldnull 723 /* 0x00000700 7D0C000004 */ IL_0168: stfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2' 724 /* (67,13)-(67,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 725 /* 0x00000705 00 */ IL_016D: nop 726 /* 0x00000706 02 */ IL_016E: ldarg.0 727 /* 0x00000707 2810000006 */ IL_016F: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally1'() 728 /* 0x0000070C 00 */ IL_0174: nop 729 /* 0x0000070D 02 */ IL_0175: ldarg.0 730 /* 0x0000070E 14 */ IL_0176: ldnull 731 /* 0x0000070F 7D0B000004 */ IL_0177: stfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1' 732 /* (68,9)-(68,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 733 /* 0x00000714 16 */ IL_017C: ldc.i4.0 734 /* 0x00000715 0A */ IL_017D: stloc.0 735 /* 0x00000716 DE08 */ IL_017E: leave.s IL_0188 736 } // end .try 737 fault 738 { 739 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 740 /* 0x00000718 02 */ IL_0180: ldarg.0 741 /* 0x00000719 280E000006 */ IL_0181: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::System.IDisposable.Dispose() 742 /* 0x0000071E 00 */ IL_0186: nop 743 /* 0x0000071F DC */ IL_0187: endfinally 744 } // end handler 745 746 /* 0x00000720 06 */ IL_0188: ldloc.0 747 /* 0x00000721 2A */ IL_0189: ret 748 } // end of method '<CreateCollection>d__1'::MoveNext 749 750 // Token: 0x06000010 RID: 16 RVA: 0x00002540 File Offset: 0x00000740 751 .method private hidebysig 752 instance void '<>m__Finally1' () cil managed 753 { 754 // Header Size: 1 byte 755 // Code Size: 38 (0x26) bytes 756 .maxstack 8 757 758 /* 0x00000741 02 */ IL_0000: ldarg.0 759 /* 0x00000742 15 */ IL_0001: ldc.i4.m1 760 /* 0x00000743 7D08000004 */ IL_0002: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 761 /* 0x00000748 02 */ IL_0007: ldarg.0 762 /* 0x00000749 7B0B000004 */ IL_0008: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1' 763 /* 0x0000074E 7B05000004 */ IL_000D: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 764 /* 0x00000753 2C11 */ IL_0012: brfalse.s IL_0025 765 766 /* 0x00000755 02 */ IL_0014: ldarg.0 767 /* 0x00000756 7B0B000004 */ IL_0015: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_0' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__1' 768 /* 0x0000075B 7B05000004 */ IL_001A: ldfld class [System]System.Collections.Concurrent.BlockingCollection`1<string> ConsoleApp1.Program/'<>c__DisplayClass1_0'::collection 769 /* 0x00000760 6F1000000A */ IL_001F: callvirt instance void [mscorlib]System.IDisposable::Dispose() 770 /* 0x00000765 00 */ IL_0024: nop 771 772 /* 0x00000766 2A */ IL_0025: ret 773 } // end of method '<CreateCollection>d__1'::'<>m__Finally1' 774 775 // Token: 0x06000011 RID: 17 RVA: 0x00002567 File Offset: 0x00000767 776 .method private hidebysig 777 instance void '<>m__Finally2' () cil managed 778 { 779 // Header Size: 1 byte 780 // Code Size: 29 (0x1D) bytes 781 .maxstack 8 782 783 /* 0x00000768 02 */ IL_0000: ldarg.0 784 /* 0x00000769 1FFD */ IL_0001: ldc.i4.s -3 785 /* 0x0000076B 7D08000004 */ IL_0003: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 786 /* 0x00000770 02 */ IL_0008: ldarg.0 787 /* 0x00000771 7B0D000004 */ IL_0009: ldfld bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3' 788 /* 0x00000776 2C0C */ IL_000E: brfalse.s IL_001C 789 790 /* 0x00000778 02 */ IL_0010: ldarg.0 791 /* 0x00000779 7B0C000004 */ IL_0011: ldfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2' 792 /* 0x0000077E 282B00000A */ IL_0016: call void [mscorlib]System.Threading.Monitor::Exit(object) 793 /* 0x00000783 00 */ IL_001B: nop 794 795 /* 0x00000784 2A */ IL_001C: ret 796 } // end of method '<CreateCollection>d__1'::'<>m__Finally2' 797 798 // Token: 0x06000012 RID: 18 RVA: 0x00002585 File Offset: 0x00000785 799 .method private hidebysig 800 instance void '<>m__Finally3' () cil managed 801 { 802 // Header Size: 1 byte 803 // Code Size: 29 (0x1D) bytes 804 .maxstack 8 805 806 /* 0x00000786 02 */ IL_0000: ldarg.0 807 /* 0x00000787 1FFC */ IL_0001: ldc.i4.s -4 808 /* 0x00000789 7D08000004 */ IL_0003: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 809 /* 0x0000078E 02 */ IL_0008: ldarg.0 810 /* 0x0000078F 7B0F000004 */ IL_0009: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5' 811 /* 0x00000794 2C0C */ IL_000E: brfalse.s IL_001C 812 813 /* 0x00000796 02 */ IL_0010: ldarg.0 814 /* 0x00000797 7B0F000004 */ IL_0011: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__5' 815 /* 0x0000079C 6F1000000A */ IL_0016: callvirt instance void [mscorlib]System.IDisposable::Dispose() 816 /* 0x000007A1 00 */ IL_001B: nop 817 818 /* 0x000007A2 2A */ IL_001C: ret 819 } // end of method '<CreateCollection>d__1'::'<>m__Finally3' 820 821 // Token: 0x06000013 RID: 19 RVA: 0x000025A3 File Offset: 0x000007A3 822 .method private final hidebysig specialname newslot virtual 823 instance string 'System.Collections.Generic.IEnumerator<System.String>.get_Current' () cil managed 824 { 825 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 826 01 00 00 00 827 ) 828 .override method instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current() 829 // Header Size: 1 byte 830 // Code Size: 7 (0x7) bytes 831 .maxstack 8 832 833 /* 0x000007A4 02 */ IL_0000: ldarg.0 834 /* 0x000007A5 7B09000004 */ IL_0001: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current' 835 /* 0x000007AA 2A */ IL_0006: ret 836 } // end of method '<CreateCollection>d__1'::'System.Collections.Generic.IEnumerator<System.String>.get_Current' 837 838 // Token: 0x06000014 RID: 20 RVA: 0x000025AB File Offset: 0x000007AB 839 .method private final hidebysig newslot virtual 840 instance void System.Collections.IEnumerator.Reset () cil managed 841 { 842 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 843 01 00 00 00 844 ) 845 .override method instance void [mscorlib]System.Collections.IEnumerator::Reset() 846 // Header Size: 1 byte 847 // Code Size: 6 (0x6) bytes 848 .maxstack 8 849 850 /* 0x000007AC 732C00000A */ IL_0000: newobj instance void [mscorlib]System.NotSupportedException::.ctor() 851 /* 0x000007B1 7A */ IL_0005: throw 852 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerator.Reset 853 854 // Token: 0x06000015 RID: 21 RVA: 0x000025B2 File Offset: 0x000007B2 855 .method private final hidebysig specialname newslot virtual 856 instance object System.Collections.IEnumerator.get_Current () cil managed 857 { 858 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 859 01 00 00 00 860 ) 861 .override method instance object [mscorlib]System.Collections.IEnumerator::get_Current() 862 // Header Size: 1 byte 863 // Code Size: 7 (0x7) bytes 864 .maxstack 8 865 866 /* 0x000007B3 02 */ IL_0000: ldarg.0 867 /* 0x000007B4 7B09000004 */ IL_0001: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current' 868 /* 0x000007B9 2A */ IL_0006: ret 869 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerator.get_Current 870 871 // Token: 0x06000016 RID: 22 RVA: 0x000025BC File Offset: 0x000007BC 872 .method private final hidebysig newslot virtual 873 instance class [mscorlib]System.Collections.Generic.IEnumerator`1<string> 'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator' () cil managed 874 { 875 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 876 01 00 00 00 877 ) 878 .override method instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<string>::GetEnumerator() 879 // Header Size: 12 bytes 880 // Code Size: 48 (0x30) bytes 881 // LocalVarSig Token: 0x11000005 RID: 5 882 .maxstack 2 883 .locals init ( 884 [0] class ConsoleApp1.Program/'<CreateCollection>d__1' 885 ) 886 887 /* 0x000007C8 02 */ IL_0000: ldarg.0 888 /* 0x000007C9 7B08000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 889 /* 0x000007CE 1FFE */ IL_0006: ldc.i4.s -2 890 /* 0x000007D0 331D */ IL_0008: bne.un.s IL_0027 891 892 /* 0x000007D2 02 */ IL_000A: ldarg.0 893 /* 0x000007D3 7B0A000004 */ IL_000B: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>l__initialThreadId' 894 /* 0x000007D8 281D00000A */ IL_0010: call class [mscorlib]System.Threading.Thread [mscorlib]System.Threading.Thread::get_CurrentThread() 895 /* 0x000007DD 6F1E00000A */ IL_0015: callvirt instance int32 [mscorlib]System.Threading.Thread::get_ManagedThreadId() 896 /* 0x000007E2 330B */ IL_001A: bne.un.s IL_0027 897 898 /* 0x000007E4 02 */ IL_001C: ldarg.0 899 /* 0x000007E5 16 */ IL_001D: ldc.i4.0 900 /* 0x000007E6 7D08000004 */ IL_001E: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state' 901 /* 0x000007EB 02 */ IL_0023: ldarg.0 902 /* 0x000007EC 0A */ IL_0024: stloc.0 903 /* 0x000007ED 2B07 */ IL_0025: br.s IL_002E 904 905 /* 0x000007EF 16 */ IL_0027: ldc.i4.0 906 /* 0x000007F0 730D000006 */ IL_0028: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32) 907 /* 0x000007F5 0A */ IL_002D: stloc.0 908 909 /* 0x000007F6 06 */ IL_002E: ldloc.0 910 /* 0x000007F7 2A */ IL_002F: ret 911 } // end of method '<CreateCollection>d__1'::'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator' 912 913 // Token: 0x06000017 RID: 23 RVA: 0x000025F8 File Offset: 0x000007F8 914 .method private final hidebysig newslot virtual 915 instance class [mscorlib]System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () cil managed 916 { 917 .custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 918 01 00 00 00 919 ) 920 .override method instance class [mscorlib]System.Collections.IEnumerator [mscorlib]System.Collections.IEnumerable::GetEnumerator() 921 // Header Size: 1 byte 922 // Code Size: 7 (0x7) bytes 923 .maxstack 8 924 925 /* 0x000007F9 02 */ IL_0000: ldarg.0 926 /* 0x000007FA 2816000006 */ IL_0001: call instance class [mscorlib]System.Collections.Generic.IEnumerator`1<string> ConsoleApp1.Program/'<CreateCollection>d__1'::'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator'() 927 /* 0x000007FF 2A */ IL_0006: ret 928 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerable.GetEnumerator 929 930 // Properties 931 // Token: 0x17000001 RID: 1 932 .property instance string 'System.Collections.Generic.IEnumerator<System.String>.Current'() 933 { 934 // Token: 0x06000013 RID: 19 RVA: 0x000025A3 File Offset: 0x000007A3 935 .get instance string ConsoleApp1.Program/'<CreateCollection>d__1'::'System.Collections.Generic.IEnumerator<System.String>.get_Current'() 936 } 937 // Token: 0x17000002 RID: 2 938 .property instance object System.Collections.IEnumerator.Current() 939 { 940 // Token: 0x06000015 RID: 21 RVA: 0x000025B2 File Offset: 0x000007B2 941 .get instance object ConsoleApp1.Program/'<CreateCollection>d__1'::System.Collections.IEnumerator.get_Current() 942 } 943 944 } // end of class <CreateCollection>d__1 945 946 947 // Fields 948 // Token: 0x04000001 RID: 1 949 .field private static initonly object globalLock 950 951 // Methods 952 // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250 953 .method public hidebysig static 954 void Main ( 955 string[] args 956 ) cil managed 957 { 958 // Header Size: 12 bytes 959 // Code Size: 92 (0x5C) bytes 960 .maxstack 3 961 .entrypoint 962 963 /* (12,9)-(12,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 964 /* 0x0000025C 00 */ IL_0000: nop 965 /* (13,13)-(22,16) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 966 /* 0x0000025D 281800000A */ IL_0001: call class [mscorlib]System.Threading.Tasks.TaskFactory [mscorlib]System.Threading.Tasks.Task::get_Factory() 967 /* 0x00000262 7E03000004 */ IL_0006: ldsfld class [mscorlib]System.Action ConsoleApp1.Program/'<>c'::'<>9__0_0' 968 /* 0x00000267 25 */ IL_000B: dup 969 /* 0x00000268 2D17 */ IL_000C: brtrue.s IL_0025 970 971 /* 0x0000026A 26 */ IL_000E: pop 972 /* 0x0000026B 7E02000004 */ IL_000F: ldsfld class ConsoleApp1.Program/'<>c' ConsoleApp1.Program/'<>c'::'<>9' 973 /* 0x00000270 FE0607000006 */ IL_0014: ldftn instance void ConsoleApp1.Program/'<>c'::'<Main>b__0_0'() 974 /* 0x00000276 731900000A */ IL_001A: newobj instance void [mscorlib]System.Action::.ctor(object, native int) 975 /* 0x0000027B 25 */ IL_001F: dup 976 /* 0x0000027C 8003000004 */ IL_0020: stsfld class [mscorlib]System.Action ConsoleApp1.Program/'<>c'::'<>9__0_0' 977 978 /* 0x00000281 6F1A00000A */ IL_0025: callvirt instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Threading.Tasks.TaskFactory::StartNew(class [mscorlib]System.Action) 979 /* 0x00000286 26 */ IL_002A: pop 980 /* (24,13)-(33,16) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 981 /* 0x00000287 281800000A */ IL_002B: call class [mscorlib]System.Threading.Tasks.TaskFactory [mscorlib]System.Threading.Tasks.Task::get_Factory() 982 /* 0x0000028C 7E04000004 */ IL_0030: ldsfld class [mscorlib]System.Action ConsoleApp1.Program/'<>c'::'<>9__0_1' 983 /* 0x00000291 25 */ IL_0035: dup 984 /* 0x00000292 2D17 */ IL_0036: brtrue.s IL_004F 985 986 /* 0x00000294 26 */ IL_0038: pop 987 /* 0x00000295 7E02000004 */ IL_0039: ldsfld class ConsoleApp1.Program/'<>c' ConsoleApp1.Program/'<>c'::'<>9' 988 /* 0x0000029A FE0608000006 */ IL_003E: ldftn instance void ConsoleApp1.Program/'<>c'::'<Main>b__0_1'() 989 /* 0x000002A0 731900000A */ IL_0044: newobj instance void [mscorlib]System.Action::.ctor(object, native int) 990 /* 0x000002A5 25 */ IL_0049: dup 991 /* 0x000002A6 8004000004 */ IL_004A: stsfld class [mscorlib]System.Action ConsoleApp1.Program/'<>c'::'<>9__0_1' 992 993 /* 0x000002AB 6F1A00000A */ IL_004F: callvirt instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Threading.Tasks.TaskFactory::StartNew(class [mscorlib]System.Action) 994 /* 0x000002B0 26 */ IL_0054: pop 995 /* (35,13)-(35,31) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 996 /* 0x000002B1 281B00000A */ IL_0055: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey() 997 /* 0x000002B6 26 */ IL_005A: pop 998 /* (36,9)-(36,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */ 999 /* 0x000002B7 2A */ IL_005B: ret1000 } // end of method Program::Main1001 1002 // Token: 0x06000002 RID: 2 RVA: 0x000020B8 File Offset: 0x000002B81003 .method private hidebysig static 1004 class [mscorlib]System.Collections.Generic.IEnumerable`1<string> CreateCollection () cil managed 1005 {1006 // Header Size: 1 byte1007 // Code Size: 8 (0x8) bytes1008 .maxstack 81009 1010 /* 0x000002B9 1FFE */ IL_0000: ldc.i4.s -21011 /* 0x000002BB 730D000006 */ IL_0002: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32)1012 /* 0x000002C0 2A */ IL_0007: ret1013 } // end of method Program::CreateCollection1014 1015 // Token: 0x06000003 RID: 3 RVA: 0x000020C1 File Offset: 0x000002C11016 .method public hidebysig specialname rtspecialname 1017 instance void .ctor () cil managed 1018 {1019 // Header Size: 1 byte1020 // Code Size: 8 (0x8) bytes1021 .maxstack 81022 1023 /* 0x000002C2 02 */ IL_0000: ldarg.01024 /* 0x000002C3 281C00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()1025 /* 0x000002C8 00 */ IL_0006: nop1026 /* 0x000002C9 2A */ IL_0007: ret1027 } // end of method Program::.ctor1028 1029 // Token: 0x06000004 RID: 4 RVA: 0x000020CA File Offset: 0x000002CA1030 .method private hidebysig specialname rtspecialname static 1031 void .cctor () cil managed 1032 {1033 // Header Size: 1 byte1034 // Code Size: 11 (0xB) bytes1035 .maxstack 81036 1037 /* (70,9)-(70,66) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */1038 /* 0x000002CB 731C00000A */ IL_0000: newobj instance void [mscorlib]System.Object::.ctor()1039 /* 0x000002D0 8001000004 */ IL_0005: stsfld object ConsoleApp1.Program::globalLock1040 /* 0x000002D5 2A */ IL_000A: ret1041 } // end of method Program::.cctor1042 1043 } // end of class ConsoleApp1.Program
View Code
查看IL,我们发现在掉用 '<CreateCollection>d__1'.MoveNext() 方法时,加了锁,在调用 '<CreateCollection>d__1''<>m__Finally2'() 方法时(调用结束时)解了锁。
但是,如果我们在第一次调用 MoveNext() 之前,另一个线程调用了 CreateCollection() 方法,那么可能第二个线程可能先执行。
总结:
1、对于yield方法来说,在所有操作上加锁,并不能保证 yield 方法体内的代码同步;
2、yield方法体内的代码,只有在调用 MoveNext() 方法时才会调用;