天需要些一个小工具,需要使用到多线程读写程序集,接口方法返回值类型需要为"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: nop
102 /* (41,29)-(41,30) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
103 /* 0x00000353 00 */ IL_006F: nop
104 /* (34,53)-(34,56) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
105 /* 0x00000354 08 */ IL_0070: ldloc.2
106 /* 0x00000355 17 */ IL_0071: ldc.i4.1
107 /* 0x00000356 58 */ IL_0072: add
108 /* 0x00000357 0C */ IL_0073: stloc.2
109
110 /* (34,45)-(34,51) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
111 /* 0x00000358 08 */ IL_0074: ldloc.2
112 /* 0x00000359 1F0A */ IL_0075: ldc.i4.s 10
113 /* 0x0000035B FE04 */ IL_0077: clt
114 /* 0x0000035D 1304 */ IL_0079: stloc.s V_4
115 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
116 /* 0x0000035F 1104 */ IL_007B: ldloc.s V_4
117 /* 0x00000361 2D98 */ IL_007D: brtrue.s IL_0017
118 // end loop
119
120 /* (42,25)-(42,26) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
121 /* 0x00000363 00 */ IL_007F: nop
122 /* 0x00000364 DE0B */ IL_0080: leave.s IL_008D
123 } // end .try
124 finally
125 {
126 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
127 /* 0x00000366 07 */ IL_0082: ldloc.1
128 /* 0x00000367 2C07 */ IL_0083: brfalse.s IL_008C
129
130 /* 0x00000369 06 */ IL_0085: ldloc.0
131 /* 0x0000036A 281F00000A */ IL_0086: call void [mscorlib]System.Threading.Monitor::Exit(object)
132 /* 0x0000036F 00 */ IL_008B: nop
133
134 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
135 /* 0x00000370 DC */ IL_008C: endfinally
136 } // end handler
137
138 /* (43,21)-(43,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
139 /* 0x00000371 2A */ IL_008D: ret
140 } // end of method '<>c__DisplayClass1_0'::'<CreateCollection>b__0'
141
142 } // end of class <>c__DisplayClass1_0
143
144 // Token: 0x02000004 RID: 4
145 .class nested private auto ansi sealed beforefieldinit '<>c__DisplayClass1_1'
146 extends [mscorlib]System.Object
147 {
148 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
149 01 00 00 00
150 )
151 // Fields
152 // Token: 0x04000003 RID: 3
153 .field public class [mscorlib]System.Exception err
154 // Token: 0x04000004 RID: 4
155 .field public class ConsoleApp1.Program/'<>c__DisplayClass1_0' 'CS$<>8__locals1'
156
157 // Methods
158 // Token: 0x06000007 RID: 7 RVA: 0x00002184 File Offset: 0x00000384
159 .method public hidebysig specialname rtspecialname
160 instance void .ctor () cil managed
161 {
162 // Header Size: 1 byte
163 // Code Size: 8 (0x8) bytes
164 .maxstack 8
165
166 /* 0x00000385 02 */ IL_0000: ldarg.0
167 /* 0x00000386 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()
168 /* 0x0000038B 00 */ IL_0006: nop
169 /* 0x0000038C 2A */ IL_0007: ret
170 } // end of method '<>c__DisplayClass1_1'::.ctor
171
172 // Token: 0x06000008 RID: 8 RVA: 0x0000218D File Offset: 0x0000038D
173 .method assembly hidebysig
174 instance void '<CreateCollection>b__1' (
175 class [mscorlib]System.Threading.Tasks.Task task
176 ) cil managed
177 {
178 // Header Size: 1 byte
179 // Code Size: 31 (0x1F) bytes
180 .maxstack 8
181
182 /* (44,21)-(44,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
183 /* 0x0000038E 00 */ IL_0000: nop
184 /* (45,25)-(45,53) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
185 /* 0x0000038F 02 */ IL_0001: ldarg.0
186 /* 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'::collection
188 /* 0x0000039A 6F2000000A */ IL_000C: callvirt instance void class [System]System.Collections.Concurrent.BlockingCollection`1<string>::CompleteAdding()
189 /* 0x0000039F 00 */ IL_0011: nop
190 /* (46,25)-(46,46) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
191 /* 0x000003A0 02 */ IL_0012: ldarg.0
192 /* 0x000003A1 03 */ IL_0013: ldarg.1
193 /* 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'::err
195 /* (47,21)-(47,22) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
196 /* 0x000003AC 2A */ IL_001E: ret
197 } // end of method '<>c__DisplayClass1_1'::'<CreateCollection>b__1'
198
199 } // end of class <>c__DisplayClass1_1
200
201 // Token: 0x02000005 RID: 5
202 .class nested private auto ansi sealed beforefieldinit '<CreateCollection>d__1'
203 extends [mscorlib]System.Object
204 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.IEnumerator
209 {
210 .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
211 01 00 00 00
212 )
213 // Fields
214 // Token: 0x04000005 RID: 5
215 .field private int32 '<>1__state'
216 // Token: 0x04000006 RID: 6
217 .field private string '<>2__current'
218 // Token: 0x04000007 RID: 7
219 .field private int32 '<>l__initialThreadId'
220 // Token: 0x04000008 RID: 8
221 .field private class ConsoleApp1.Program/'<>c__DisplayClass1_0' '<>8__1'
222 // Token: 0x04000009 RID: 9
223 .field private object '<>s__2'
224 // Token: 0x0400000A RID: 10
225 .field private bool '<>s__3'
226 // Token: 0x0400000B RID: 11
227 .field private class ConsoleApp1.Program/'<>c__DisplayClass1_1' '<>8__4'
228 // Token: 0x0400000C RID: 12
229 .field private class [mscorlib]System.Collections.Generic.IEnumerator`1<string> '<>s__5'
230 // Token: 0x0400000D RID: 13
231 .field private string '<item>5__6'
232
233 // Methods
234 // Token: 0x06000009 RID: 9 RVA: 0x000021AD File Offset: 0x000003AD
235 .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 00
242 )
243 // Header Size: 1 byte
244 // Code Size: 31 (0x1F) bytes
245 .maxstack 8
246
247 /* 0x000003AE 02 */ IL_0000: ldarg.0
248 /* 0x000003AF 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()
249 /* 0x000003B4 00 */ IL_0006: nop
250 /* 0x000003B5 02 */ IL_0007: ldarg.0
251 /* 0x000003B6 03 */ IL_0008: ldarg.1
252 /* 0x000003B7 7D05000004 */ IL_0009: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
253 /* 0x000003BC 02 */ IL_000E: ldarg.0
254 /* 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: ret
258 } // end of method '<CreateCollection>d__1'::.ctor
259
260 // Token: 0x0600000A RID: 10 RVA: 0x000021D0 File Offset: 0x000003D0
261 .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 00
266 )
267 .override method instance void [mscorlib]System.IDisposable::Dispose()
268 // Header Size: 12 bytes
269 // Code Size: 60 (0x3C) bytes
270 // LocalVarSig Token: 0x11000003 RID: 3
271 .maxstack 2
272 .locals init (
273 [0] int32
274 )
275
276 /* 0x000003DC 02 */ IL_0000: ldarg.0
277 /* 0x000003DD 7B05000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
278 /* 0x000003E2 0A */ IL_0006: stloc.0
279 /* 0x000003E3 06 */ IL_0007: ldloc.0
280 /* 0x000003E4 1FFC */ IL_0008: ldc.i4.s -4
281 /* 0x000003E6 59 */ IL_000A: sub
282 /* 0x000003E7 17 */ IL_000B: ldc.i4.1
283 /* 0x000003E8 3608 */ IL_000C: ble.un.s IL_0016
284
285 /* 0x000003EA 2B00 */ IL_000E: br.s IL_0010
286
287 /* 0x000003EC 06 */ IL_0010: ldloc.0
288 /* 0x000003ED 17 */ IL_0011: ldc.i4.1
289 /* 0x000003EE 2E02 */ IL_0012: beq.s IL_0016
290
291 /* 0x000003F0 2B25 */ IL_0014: br.s IL_003B
292
293 /* 0x000003F2 00 */ IL_0016: nop
294 .try
295 {
296 /* 0x000003F3 06 */ IL_0017: ldloc.0
297 /* 0x000003F4 1FFC */ IL_0018: ldc.i4.s -4
298 /* 0x000003F6 2E08 */ IL_001A: beq.s IL_0024
299
300 /* 0x000003F8 2B00 */ IL_001C: br.s IL_001E
301
302 /* 0x000003FA 06 */ IL_001E: ldloc.0
303 /* 0x000003FB 17 */ IL_001F: ldc.i4.1
304 /* 0x000003FC 2E02 */ IL_0020: beq.s IL_0024
305
306 /* 0x000003FE 2B0C */ IL_0022: br.s IL_0030
307
308 /* 0x00000400 00 */ IL_0024: nop
309 .try
310 {
311 /* 0x00000401 DE07 */ IL_0025: leave.s IL_002E
312 } // end .try
313 finally
314 {
315 /* 0x00000403 02 */ IL_0027: ldarg.0
316 /* 0x00000404 280D000006 */ IL_0028: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally2'()
317 /* 0x00000409 DC */ IL_002D: endfinally
318 } // end handler
319
320 /* 0x0000040A 2B00 */ IL_002E: br.s IL_0030
321
322 /* 0x0000040C DE07 */ IL_0030: leave.s IL_0039
323 } // end .try
324 finally
325 {
326 /* 0x0000040E 02 */ IL_0032: ldarg.0
327 /* 0x0000040F 280C000006 */ IL_0033: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally1'()
328 /* 0x00000414 DC */ IL_0038: endfinally
329 } // end handler
330
331 /* 0x00000415 2B00 */ IL_0039: br.s IL_003B
332
333 /* 0x00000417 2A */ IL_003B: ret
334 } // end of method '<CreateCollection>d__1'::System.IDisposable.Dispose
335
336 // Token: 0x0600000B RID: 11 RVA: 0x00002234 File Offset: 0x00000434
337 .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 bytes
342 // Code Size: 397 (0x18D) bytes
343 // LocalVarSig Token: 0x11000004 RID: 4
344 .maxstack 3
345 .locals init (
346 [0] bool,
347 [1] int32
348 )
349
350 .try
351 {
352 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
353 /* 0x00000440 02 */ IL_0000: ldarg.0
354 /* 0x00000441 7B05000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
355 /* 0x00000446 0B */ IL_0006: stloc.1
356 /* 0x00000447 07 */ IL_0007: ldloc.1
357 /* 0x00000448 2C08 */ IL_0008: brfalse.s IL_0012
358
359 /* 0x0000044A 2B00 */ IL_000A: br.s IL_000C
360
361 /* 0x0000044C 07 */ IL_000C: ldloc.1
362 /* 0x0000044D 17 */ IL_000D: ldc.i4.1
363 /* 0x0000044E 2E04 */ IL_000E: beq.s IL_0014
364
365 /* 0x00000450 2B07 */ IL_0010: br.s IL_0019
366
367 /* 0x00000452 2B0C */ IL_0012: br.s IL_0020
368
369 /* 0x00000454 382C010000 */ IL_0014: br IL_0145
370
371 /* 0x00000459 16 */ IL_0019: ldc.i4.0
372 /* 0x0000045A 0A */ IL_001A: stloc.0
373 /* 0x0000045B DD6B010000 */ IL_001B: leave IL_018B
374
375 /* 0x00000460 02 */ IL_0020: ldarg.0
376 /* 0x00000461 15 */ IL_0021: ldc.i4.m1
377 /* 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: nop
380 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
381 /* 0x00000468 02 */ IL_0028: ldarg.0
382 /* 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.0
386 /* 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'::collection
389 /* 0x00000483 02 */ IL_0043: ldarg.0
390 /* 0x00000484 1FFD */ IL_0044: ldc.i4.s -3
391 /* 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: nop
394 /* (27,17)-(27,34) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
395 /* 0x0000048C 02 */ IL_004C: ldarg.0
396 /* 0x0000048D 7E01000004 */ IL_004D: ldsfld object ConsoleApp1.Program::globalLock
397 /* 0x00000492 7D09000004 */ IL_0052: stfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2'
398 /* 0x00000497 02 */ IL_0057: ldarg.0
399 /* 0x00000498 16 */ IL_0058: ldc.i4.0
400 /* 0x00000499 7D0A000004 */ IL_0059: stfld bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3'
401 .try
402 {
403 /* 0x0000049E 02 */ IL_005E: ldarg.0
404 /* 0x0000049F 7B09000004 */ IL_005F: ldfld object ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__2'
405 /* 0x000004A4 02 */ IL_0064: ldarg.0
406 /* 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: nop
409 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
410 /* 0x000004B0 02 */ IL_0070: ldarg.0
411 /* 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.0
414 /* 0x000004BC 7B0B000004 */ IL_007C: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'
415 /* 0x000004C1 02 */ IL_0081: ldarg.0
416 /* 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: nop
420 /* (29,21)-(29,42) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
421 /* 0x000004CD 02 */ IL_008D: ldarg.0
422 /* 0x000004CE 7B0B000004 */ IL_008E: ldfld class ConsoleApp1.Program/'<>c__DisplayClass1_1' ConsoleApp1.Program/'<CreateCollection>d__1'::'<>8__4'
423 /* 0x000004D3 14 */ IL_0093: ldnull
424 /* 0x000004D4 7D03000004 */ IL_0094: stfld class [mscorlib]System.Exception ConsoleApp1.Program/'<>c__DisplayClass1_1'::err
425 /* (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.0
428 /* 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.0
434 /* 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: pop
439 /* (48,17)-(48,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
440 /* 0x00000510 00 */ IL_00D0: nop
441 /* 0x00000511 02 */ IL_00D1: ldarg.0
442 /* 0x00000512 14 */ IL_00D2: ldnull
443 /* 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_00EF
445 } // end .try
446 finally
447 {
448 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
449 /* 0x0000051A 02 */ IL_00DA: ldarg.0
450 /* 0x0000051B 7B0A000004 */ IL_00DB: ldfld bool ConsoleApp1.Program/'<CreateCollection>d__1'::'<>s__3'
451 /* 0x00000520 2C0C */ IL_00E0: brfalse.s IL_00EE
452
453 /* 0x00000522 02 */ IL_00E2: ldarg.0
454 /* 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: nop
457
458 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
459 /* 0x0000052E DC */ IL_00EE: endfinally
460 } // end handler
461
462 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
463 /* 0x0000052F 02 */ IL_00EF: ldarg.0
464 /* 0x00000530 14 */ IL_00F0: ldnull
465 /* 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: nop
468 /* (50,41)-(50,76) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
469 /* 0x00000537 02 */ IL_00F7: ldarg.0
470 /* 0x00000538 02 */ IL_00F8: ldarg.0
471 /* 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'::collection
473 /* 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.0
477 /* 0x00000553 1FFC */ IL_0113: ldc.i4.s -4
478 /* 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_0155
481
482 /* (50,26)-(50,37) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
483 /* 0x0000055C 02 */ IL_011C: ldarg.0
484 /* 0x0000055D 02 */ IL_011D: ldarg.0
485 /* 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: nop
490 /* (52,21)-(52,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
491 /* 0x0000056E 02 */ IL_012E: ldarg.0
492 /* 0x0000056F 02 */ IL_012F: ldarg.0
493 /* 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.0
496 /* 0x0000057B 17 */ IL_013B: ldc.i4.1
497 /* 0x0000057C 7D05000004 */ IL_013C: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
498 /* 0x00000581 17 */ IL_0141: ldc.i4.1
499 /* 0x00000582 0A */ IL_0142: stloc.0
500 /* 0x00000583 DE46 */ IL_0143: leave.s IL_018B
501
502 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
503 /* 0x00000585 02 */ IL_0145: ldarg.0
504 /* 0x00000586 1FFC */ IL_0146: ldc.i4.s -4
505 /* 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: nop
508 /* 0x0000058E 02 */ IL_014E: ldarg.0
509 /* 0x0000058F 14 */ IL_014F: ldnull
510 /* 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.0
514 /* 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_011C
517
518 /* 0x000005A2 02 */ IL_0162: ldarg.0
519 /* 0x000005A3 280D000006 */ IL_0163: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally2'()
520 /* 0x000005A8 00 */ IL_0168: nop
521 /* 0x000005A9 02 */ IL_0169: ldarg.0
522 /* 0x000005AA 14 */ IL_016A: ldnull
523 /* 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: nop
526 /* 0x000005B1 02 */ IL_0171: ldarg.0
527 /* 0x000005B2 280C000006 */ IL_0172: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::'<>m__Finally1'()
528 /* 0x000005B7 00 */ IL_0177: nop
529 /* 0x000005B8 02 */ IL_0178: ldarg.0
530 /* 0x000005B9 14 */ IL_0179: ldnull
531 /* 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.0
534 /* 0x000005C0 0A */ IL_0180: stloc.0
535 /* 0x000005C1 DE08 */ IL_0181: leave.s IL_018B
536 } // end .try
537 fault
538 {
539 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
540 /* 0x000005C3 02 */ IL_0183: ldarg.0
541 /* 0x000005C4 280A000006 */ IL_0184: call instance void ConsoleApp1.Program/'<CreateCollection>d__1'::System.IDisposable.Dispose()
542 /* 0x000005C9 00 */ IL_0189: nop
543 /* 0x000005CA DC */ IL_018A: endfinally
544 } // end handler
545
546 /* 0x000005CB 06 */ IL_018B: ldloc.0
547 /* 0x000005CC 2A */ IL_018C: ret
548 } // end of method '<CreateCollection>d__1'::MoveNext
549
550 // Token: 0x0600000C RID: 12 RVA: 0x00002404 File Offset: 0x00000604
551 .method private hidebysig
552 instance void '<>m__Finally1' () cil managed
553 {
554 // Header Size: 1 byte
555 // Code Size: 38 (0x26) bytes
556 .maxstack 8
557
558 /* 0x00000605 02 */ IL_0000: ldarg.0
559 /* 0x00000606 15 */ IL_0001: ldc.i4.m1
560 /* 0x00000607 7D05000004 */ IL_0002: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
561 /* 0x0000060C 02 */ IL_0007: ldarg.0
562 /* 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'::collection
564 /* 0x00000617 2C11 */ IL_0012: brfalse.s IL_0025
565
566 /* 0x00000619 02 */ IL_0014: ldarg.0
567 /* 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'::collection
569 /* 0x00000624 6F1000000A */ IL_001F: callvirt instance void [mscorlib]System.IDisposable::Dispose()
570 /* 0x00000629 00 */ IL_0024: nop
571
572 /* 0x0000062A 2A */ IL_0025: ret
573 } // end of method '<CreateCollection>d__1'::'<>m__Finally1'
574
575 // Token: 0x0600000D RID: 13 RVA: 0x0000242B File Offset: 0x0000062B
576 .method private hidebysig
577 instance void '<>m__Finally2' () cil managed
578 {
579 // Header Size: 1 byte
580 // Code Size: 29 (0x1D) bytes
581 .maxstack 8
582
583 /* 0x0000062C 02 */ IL_0000: ldarg.0
584 /* 0x0000062D 1FFD */ IL_0001: ldc.i4.s -3
585 /* 0x0000062F 7D05000004 */ IL_0003: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
586 /* 0x00000634 02 */ IL_0008: ldarg.0
587 /* 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_001C
589
590 /* 0x0000063C 02 */ IL_0010: ldarg.0
591 /* 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: nop
594
595 /* 0x00000648 2A */ IL_001C: ret
596 } // end of method '<CreateCollection>d__1'::'<>m__Finally2'
597
598 // Token: 0x0600000E RID: 14 RVA: 0x00002449 File Offset: 0x00000649
599 .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 00
604 )
605 .override method instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current()
606 // Header Size: 1 byte
607 // Code Size: 7 (0x7) bytes
608 .maxstack 8
609
610 /* 0x0000064A 02 */ IL_0000: ldarg.0
611 /* 0x0000064B 7B06000004 */ IL_0001: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current'
612 /* 0x00000650 2A */ IL_0006: ret
613 } // end of method '<CreateCollection>d__1'::'System.Collections.Generic.IEnumerator<System.String>.get_Current'
614
615 // Token: 0x0600000F RID: 15 RVA: 0x00002451 File Offset: 0x00000651
616 .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 00
621 )
622 .override method instance void [mscorlib]System.Collections.IEnumerator::Reset()
623 // Header Size: 1 byte
624 // Code Size: 6 (0x6) bytes
625 .maxstack 8
626
627 /* 0x00000652 732B00000A */ IL_0000: newobj instance void [mscorlib]System.NotSupportedException::.ctor()
628 /* 0x00000657 7A */ IL_0005: throw
629 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerator.Reset
630
631 // Token: 0x06000010 RID: 16 RVA: 0x00002458 File Offset: 0x00000658
632 .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 00
637 )
638 .override method instance object [mscorlib]System.Collections.IEnumerator::get_Current()
639 // Header Size: 1 byte
640 // Code Size: 7 (0x7) bytes
641 .maxstack 8
642
643 /* 0x00000659 02 */ IL_0000: ldarg.0
644 /* 0x0000065A 7B06000004 */ IL_0001: ldfld string ConsoleApp1.Program/'<CreateCollection>d__1'::'<>2__current'
645 /* 0x0000065F 2A */ IL_0006: ret
646 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerator.get_Current
647
648 // Token: 0x06000011 RID: 17 RVA: 0x00002460 File Offset: 0x00000660
649 .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 00
654 )
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 bytes
657 // Code Size: 48 (0x30) bytes
658 // LocalVarSig Token: 0x11000005 RID: 5
659 .maxstack 2
660 .locals init (
661 [0] class ConsoleApp1.Program/'<CreateCollection>d__1'
662 )
663
664 /* 0x0000066C 02 */ IL_0000: ldarg.0
665 /* 0x0000066D 7B05000004 */ IL_0001: ldfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
666 /* 0x00000672 1FFE */ IL_0006: ldc.i4.s -2
667 /* 0x00000674 331D */ IL_0008: bne.un.s IL_0027
668
669 /* 0x00000676 02 */ IL_000A: ldarg.0
670 /* 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_0027
674
675 /* 0x00000688 02 */ IL_001C: ldarg.0
676 /* 0x00000689 16 */ IL_001D: ldc.i4.0
677 /* 0x0000068A 7D05000004 */ IL_001E: stfld int32 ConsoleApp1.Program/'<CreateCollection>d__1'::'<>1__state'
678 /* 0x0000068F 02 */ IL_0023: ldarg.0
679 /* 0x00000690 0A */ IL_0024: stloc.0
680 /* 0x00000691 2B07 */ IL_0025: br.s IL_002E
681
682 /* 0x00000693 16 */ IL_0027: ldc.i4.0
683 /* 0x00000694 7309000006 */ IL_0028: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32)
684 /* 0x00000699 0A */ IL_002D: stloc.0
685
686 /* 0x0000069A 06 */ IL_002E: ldloc.0
687 /* 0x0000069B 2A */ IL_002F: ret
688 } // end of method '<CreateCollection>d__1'::'System.Collections.Generic.IEnumerable<System.String>.GetEnumerator'
689
690 // Token: 0x06000012 RID: 18 RVA: 0x0000249C File Offset: 0x0000069C
691 .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 00
696 )
697 .override method instance class [mscorlib]System.Collections.IEnumerator [mscorlib]System.Collections.IEnumerable::GetEnumerator()
698 // Header Size: 1 byte
699 // Code Size: 7 (0x7) bytes
700 .maxstack 8
701
702 /* 0x0000069D 02 */ IL_0000: ldarg.0
703 /* 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: ret
705 } // end of method '<CreateCollection>d__1'::System.Collections.IEnumerable.GetEnumerator
706
707 // Properties
708 // Token: 0x17000001 RID: 1
709 .property instance string 'System.Collections.Generic.IEnumerator<System.String>.Current'()
710 {
711 // Token: 0x0600000E RID: 14 RVA: 0x00002449 File Offset: 0x00000649
712 .get instance string ConsoleApp1.Program/'<CreateCollection>d__1'::'System.Collections.Generic.IEnumerator<System.String>.get_Current'()
713 }
714 // Token: 0x17000002 RID: 2
715 .property instance object System.Collections.IEnumerator.Current()
716 {
717 // Token: 0x06000010 RID: 16 RVA: 0x00002458 File Offset: 0x00000658
718 .get instance object ConsoleApp1.Program/'<CreateCollection>d__1'::System.Collections.IEnumerator.get_Current()
719 }
720
721 } // end of class <CreateCollection>d__1
722
723
724 // Fields
725 // Token: 0x04000001 RID: 1
726 .field private static initonly object globalLock
727
728 // Methods
729 // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
730 .method private hidebysig static
731 void Main (
732 string[] args
733 ) cil managed
734 {
735 // Header Size: 12 bytes
736 // Code Size: 67 (0x43) bytes
737 // LocalVarSig Token: 0x11000001 RID: 1
738 .maxstack 2
739 .entrypoint
740 .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 str
744 )
745
746 /* (13,9)-(13,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
747 /* 0x0000025C 00 */ IL_0000: nop
748 /* (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.0
751 /* (15,13)-(15,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
752 /* 0x00000263 00 */ IL_0007: nop
753 /* (16,17)-(16,24) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
754 /* 0x00000264 00 */ IL_0008: nop
755 /* (16,40)-(16,44) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
756 /* 0x00000265 06 */ IL_0009: ldloc.0
757 /* 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.1
759 .try
760 {
761 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
762 /* 0x0000026C 2B1A */ IL_0010: br.s IL_002C
763 // 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.1
766 /* 0x0000026F 6F1200000A */ IL_0013: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<string>::get_Current()
767 /* 0x00000274 0C */ IL_0018: stloc.2
768 /* (17,17)-(17,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
769 /* 0x00000275 00 */ IL_0019: nop
770 /* (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.2
773 /* 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: nop
776 /* (19,17)-(19,18) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
777 /* 0x00000287 00 */ IL_002B: nop
778
779 /* (16,37)-(16,39) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
780 /* 0x00000288 07 */ IL_002C: ldloc.1
781 /* 0x00000289 6F1100000A */ IL_002D: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()
782 /* 0x0000028E 2DDE */ IL_0032: brtrue.s IL_0012
783 // end loop
784
785 /* 0x00000290 DE0B */ IL_0034: leave.s IL_0041
786 } // end .try
787 finally
788 {
789 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
790 /* 0x00000292 07 */ IL_0036: ldloc.1
791 /* 0x00000293 2C07 */ IL_0037: brfalse.s IL_0040
792
793 /* 0x00000295 07 */ IL_0039: ldloc.1
794 /* 0x00000296 6F1000000A */ IL_003A: callvirt instance void [mscorlib]System.IDisposable::Dispose()
795 /* 0x0000029B 00 */ IL_003F: nop
796
797 /* (hidden)-(hidden) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
798 /* 0x0000029C DC */ IL_0040: endfinally
799 } // end handler
800
801 /* (20,13)-(20,14) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
802 /* 0x0000029D 00 */ IL_0041: nop
803 /* (21,9)-(21,10) C:\Users\rismo202\source\repos\ConsoleApp1\ConsoleApp1\Program.cs */
804 /* 0x0000029E 2A */ IL_0042: ret
805 } // end of method Program::Main
806
807 // Token: 0x06000002 RID: 2 RVA: 0x000020B0 File Offset: 0x000002B0
808 .method private hidebysig static
809 class [mscorlib]System.Collections.Generic.IEnumerable`1<string> CreateCollection () cil managed
810 {
811 // Header Size: 1 byte
812 // Code Size: 8 (0x8) bytes
813 .maxstack 8
814
815 /* 0x000002B1 1FFE */ IL_0000: ldc.i4.s -2
816 /* 0x000002B3 7309000006 */ IL_0002: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32)
817 /* 0x000002B8 2A */ IL_0007: ret
818 } // end of method Program::CreateCollection
819
820 // Token: 0x06000003 RID: 3 RVA: 0x000020B9 File Offset: 0x000002B9
821 .method public hidebysig specialname rtspecialname
822 instance void .ctor () cil managed
823 {
824 // Header Size: 1 byte
825 // Code Size: 8 (0x8) bytes
826 .maxstack 8
827
828 /* 0x000002BA 02 */ IL_0000: ldarg.0
829 /* 0x000002BB 281A00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()
830 /* 0x000002C0 00 */ IL_0006: nop
831 /* 0x000002C1 2A */ IL_0007: ret
832 } // end of method Program::.ctor
833
834 // Token: 0x06000004 RID: 4 RVA: 0x000020C2 File Offset: 0x000002C2
835 .method private hidebysig specialname rtspecialname static
836 void .cctor () cil managed
837 {
838 // Header Size: 1 byte
839 // Code Size: 11 (0xB) bytes
840 .maxstack 8
841
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::globalLock
845 /* 0x000002CD 2A */ IL_000A: ret
846 } // end of method Program::.cctor
847
848 } // end of class ConsoleApp1.Program

为了清晰显示其逻辑,对应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_1
100 : IEnumerable<string>,
101 IEnumerable,
102 IEnumerator<string>,
103 IEnumerator,
104 IDisposable
105 {
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.initialThreadId
125 = 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 try
144 {
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 try
159 {
160 }
161 finally
162 {
163 this.m__Finally2();
164 }
165 }
166 finally
167 {
168 this.m__Finally1();
169 }
170 }
171
172 bool IEnumerator.MoveNext()
173 {
174 bool loc_0;
175 int loc_1;
176
177 try
178 {
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 try
205 {
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 finally
218 {
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__1
229 .collection
230 .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 finally
266 {
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>.Current
294 {
295 get
296 {
297 return this.current;
298 }
299 }
300
301 void IEnumerator.Reset()
302 {
303 throw new NotSupportedException();
304 }
305
306 object IEnumerator.Current
307 {
308 get
309 {
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: ret
1000 } // end of method Program::Main
1001
1002 // Token: 0x06000002 RID: 2 RVA: 0x000020B8 File Offset: 0x000002B8
1003 .method private hidebysig static
1004 class [mscorlib]System.Collections.Generic.IEnumerable`1<string> CreateCollection () cil managed
1005 {
1006 // Header Size: 1 byte
1007 // Code Size: 8 (0x8) bytes
1008 .maxstack 8
1009
1010 /* 0x000002B9 1FFE */ IL_0000: ldc.i4.s -2
1011 /* 0x000002BB 730D000006 */ IL_0002: newobj instance void ConsoleApp1.Program/'<CreateCollection>d__1'::.ctor(int32)
1012 /* 0x000002C0 2A */ IL_0007: ret
1013 } // end of method Program::CreateCollection
1014
1015 // Token: 0x06000003 RID: 3 RVA: 0x000020C1 File Offset: 0x000002C1
1016 .method public hidebysig specialname rtspecialname
1017 instance void .ctor () cil managed
1018 {
1019 // Header Size: 1 byte
1020 // Code Size: 8 (0x8) bytes
1021 .maxstack 8
1022
1023 /* 0x000002C2 02 */ IL_0000: ldarg.0
1024 /* 0x000002C3 281C00000A */ IL_0001: call instance void [mscorlib]System.Object::.ctor()
1025 /* 0x000002C8 00 */ IL_0006: nop
1026 /* 0x000002C9 2A */ IL_0007: ret
1027 } // end of method Program::.ctor
1028
1029 // Token: 0x06000004 RID: 4 RVA: 0x000020CA File Offset: 0x000002CA
1030 .method private hidebysig specialname rtspecialname static
1031 void .cctor () cil managed
1032 {
1033 // Header Size: 1 byte
1034 // Code Size: 11 (0xB) bytes
1035 .maxstack 8
1036
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::globalLock
1040 /* 0x000002D5 2A */ IL_000A: ret
1041 } // end of method Program::.cctor
1042
1043 } // end of class ConsoleApp1.Program

查看IL,我们发现在掉用 '<CreateCollection>d__1'.MoveNext() 方法时,加了锁,在调用 '<CreateCollection>d__1''<>m__Finally2'() 方法时(调用结束时)解了锁。

但是,如果我们在第一次调用 MoveNext() 之前,另一个线程调用了 CreateCollection() 方法,那么可能第二个线程可能先执行。

总结:

1、对于yield方法来说,在所有操作上加锁,并不能保证 yield 方法体内的代码同步;

2、yield方法体内的代码,只有在调用 MoveNext() 方法时才会调用;

C# yield return 原理探究的更多相关文章

  1. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  2. yield学习续:yield return迭代块在Unity3D中的应用——协程

    必读好文推荐: Unity协程(Coroutine)原理深入剖析 Unity协程(Coroutine)原理深入剖析再续 上面的文章说得太透彻,所以这里就记一下自己的学习笔记了. 首先要说明的是,协程并 ...

  3. 12.C#yield return和yield break及实际应用小例(六章6.2-6.4)

    晚上好,各位.今天结合书中所讲和MSDN所查,聊下yield关键字,它是我们简化迭代器的关键. 如果你在语句中使用了yield关键字,则意味着它在其中出现的方法.运算符或get访问器是迭代器,通过使用 ...

  4. C#yield return和yield break

    C#yield return和yield break 晚上好,各位.今天结合书中所讲和MSDN所查,聊下yield关键字,它是我们简化迭代器的关键. 如果你在语句中使用了yield关键字,则意味着它在 ...

  5. c# yield关键字原理详解

    c# yield关键字的用法 1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也 ...

  6. c# yield关键字原理

    https://www.cnblogs.com/blueberryzzz/p/8678700.html c# yield关键字原理详解 1.yield实现的功能yield return:先看下面的代码 ...

  7. SpringBoot:运行原理探究

    西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...

  8. go--->共享内存和通信两种并发模式原理探究

    共享内存和通信两种并发模式原理探究 并发理解 人类发明计算机编程的本质目的是为了什么呢?毫无疑问是为了解决人类社会中的各种负责业务场景问题.ok,有了这个出发点,那么想象一下,比如你既可以一心一意只做 ...

  9. ThreadPoolExcutor 原理探究

    概论 线程池(英语:thread pool):一种线程使用模式.线程过多会带来调度开销,进而影响缓存局部性和整体性能.而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务.这避免了在处理短时间 ...

随机推荐

  1. js repeatify & no for loop

    js repeatify & no for loop js repeatify https://www.sitepoint.com/5-typical-javascript-interview ...

  2. 密码 & 安全

    密码 & 安全 拖库/脱库 如何在数据库中存储密码更安全? https://time.geekbang.org/dailylesson/detail/100044031 拖库和撞库 https ...

  3. 蓝牙鼠标 & 罗技 M337

    蓝牙鼠标 & 罗技 M337 蓝牙鼠标,有哪些不需要适配器的 https://www.logitech.com.cn/zh-cn/product/bluetooth-mouse-m337 ht ...

  4. 为什么10月上线的NGK Global即将燎原资本市场

    近日据社区透露,NGK Global将在10月全面启动,数据公开透明,人人可以参与运营监管. 现在,区块链经济已经处于爆发前夜.金融行业的探索领先一筹,而其他行业的应用正在快速展开.区块链行业应用头部 ...

  5. 1094 The Largest Generation ——PAT甲级真题

    1094 The Largest Generation A family hierarchy is usually presented by a pedigree tree where all the ...

  6. java实现压缩文件

    原文链接:https://www.cnblogs.com/zeng1994/p/7862288.html

  7. Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发

    ===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...

  8. 微信小程序:上滑触底加载下一页

    给商品列表页面添加一个上滑触底加载下一页的效果,滚动条触底之后就发送一个请求,来加载下一页数据, 先在getGoodsList中获取总条数 由于总页数需要再另外的一个方法中使用,所以要把总页数变成一个 ...

  9. JAVA 判断一个字符串是否是合法的日期格式?

    采用SimpleDateFormat类的parse方法进行判断,如果转换不成功,就会出现异常.另外,还需要判断字符串的长度,若不判断,第二个字符串就会验证通过,实际上也不是合法的.话不多说,且看代码: ...

  10. Kubernetes中分布式存储Rook-Ceph部署快速演练

    最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些.项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整 ...