Hi,
ik probeer al een week een List<T> thread safe te maken, omdat ik wil enumereren over de list, en toch ondertussen data toevoegen:
ik heb de volgende concept code uitgewerkt:
En ik heb veel gelezen over thread safety, en het kwam er dus op neer van lock te gebruiken. Maar dan geeft hij nog steeds een invalid operation op de foreach.
Ik had al gelezen over BlockingCollection<T> in het parallel framework van .NET 4.0, maar deze is momenteel nog niet final, dus die gebruik ik liever niet.
Wat vergeet ik?
ik probeer al een week een List<T> thread safe te maken, omdat ik wil enumereren over de list, en toch ondertussen data toevoegen:
ik heb de volgende concept code uitgewerkt:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| using System; using System.Collections.Generic; using System.Threading; namespace TimerTest { class Program { static void Main(string[] args) { (new Program()).Start(); } public void Start() { List<int> list = new List<int>(); Random r = new Random(); for (int x = 0; x < 10; x++) { list.Add(r.Next(1, 100)); } Thread t = new Thread(() => { System.Threading.Timer timer = new Timer( delegate { list.Add(r.Next(1, 100)); }, null, 1000, 1000); }); t.Start(); while (true) { lock (list) { foreach (int item in list) { Console.WriteLine(item.ToString()); } } } } } } |
En ik heb veel gelezen over thread safety, en het kwam er dus op neer van lock te gebruiken. Maar dan geeft hij nog steeds een invalid operation op de foreach.
Ik had al gelezen over BlockingCollection<T> in het parallel framework van .NET 4.0, maar deze is momenteel nog niet final, dus die gebruik ik liever niet.
Wat vergeet ik?
Going for adventure, lots of sun and a convertible! | GMT-8