Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C# .NET] Threadingpool -> is dit ok?

Pagina: 1
Acties:

  • Spiral
  • Registratie: December 2005
  • Niet online
Waar het mij omgaat is dat je met STAThread waar een normale applicatie met start niet samen werkt met WaitHandle.WaitAll(doneEvents); Wat ik zou kunnen oplossen door 'm Multi threaded apartment te maken (MTAThread), maar dat terzijde.

Daarom dacht ik, ik los het op de manier volgende manier op:

C#:
1
2
    foreach (ManualResetEvent mre in doneEvents)
      mre.WaitOne();


Het lijkt te werken, maar is het wel veilig?¿

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
class A
{
  void doThis(){
    ManualResetEvent[] doneEvents = new ManualResetEvent[ht.Count];

    foreach(MyObject b in ht.Values){
      doneEvents[i] = new ManualResetEvent(false);
      b.eventDone = doneEvents[i];
      ThreadPool.QueueUserWorkItem(b.ThreadPoolCallBack,i++);
    }

    foreach (ManualResetEvent mre in doneEvents)
      mre.WaitOne();
  }
}

class MyObject
{
  public void ThreadPoolCallBack(object threadNumber)
  {
    Console.WriteLine("Thread:{0} ->{1} is gestart.",threadNumber, this.Naam);
    this.DoeDit(true);
    eventDone.Set();
  }

  void DoeDit(bool maghet){}
}

[ Voor 4% gewijzigd door Spiral op 28-08-2007 12:40 ]

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ja, dat is OK. Maar items welke je via de threadpool 'start' hoeven niet direct afgehandeld te worden. Threadpool threads draaien uitsluitend op de achtergrond.

De werking is dus niet hetzelfde als Thread.Start(). De MSDN reference documentatie bevat meer informatie over de verschillen tussen een Thread en een ThreadPool tread (queue).

Overigens is het wel verstandig als je met (background) threads gaat werken, je toch STA veranderd door MTA. De CLR heeft dan minder resources nodig en de performance is een stuk beter.

If it isn't broken, fix it until it is..