Domanda

Ho una conoscenza di base del multi-threading, ma non ho mai dovuto fare altro che semplici timer in un'applicazione.Qualcuno conosce una buona risorsa che mi spiegherà come lavorare con applicazioni multi-thread, spiegando le basi e magari esponendo alcune delle cose più difficili?

È stato utile?

Soluzione

Questa è una grande risorsa gratuita di Joseph Albahari. Threading in C#

Altri suggerimenti

Due ottimi articoli:

Ciò che ogni sviluppatore deve sapere sulle app multithread
Comprendere l'impatto delle tecniche di low-lock nelle app multithread

Sebbene questo articolo non sia esattamente quello che stai cercando nello specifico, si spera che possa essere di aiuto in generale (ad es.Esso È correlati e un'ottima lettura):

Il pranzo gratuito è terminato:Una svolta fondamentale verso la concorrenza nel software

Esistono 4 modi fondamentali per sincronizzare i thread in .Net:

  • Controllo BackgroundWorker
  • WaitHandles
  • Funzioni di richiamata
  • polling di un oggetto ASyncResult

Generalmente si desidera iniziare dall'inizio dell'elenco e procedere verso il basso.Ciò significa innanzitutto verificare se un controllo backgroundworker è appropriato alla situazione.Tuttavia, presuppone praticamente i moduli Windows e che stai generando solo un nuovo thread.

Quindi la prossima volta prova waithandles.I waithandle sono utili per coordinare diversi thread insieme.Puoi cacciarli tutti e aspettare che finiscano tutti, oppure se vuoi mantenere attivo un certo numero puoi continuare ad aspettarne solo uno e generare il successivo quando finisce.O forse sai che un thread finirà molto prima, quindi puoi aspettare che finisca, fare un po' di lavoro e poi aspettare che finisca il resto.

I waithandle potrebbero sembrare un po' eccessivi se, ad esempio, stai generando solo un thread aggiuntivo e non vuoi bloccarlo fino al termine.Quindi potresti utilizzare un callback, in modo che la funzione designata venga chiamata non appena il thread viene completato.

Infine, se e solo se per qualche motivo nessuna delle soluzioni precedenti funziona, puoi ricorrere al sondaggio.

Posso pensare a 5 modi diversi per ottenere un nuovo thread in .Net, anche più o meno in ordine:

  • Sistema operativo creato, normalmente come risultato di un evento winforms (incluso BackgoundWorker).
  • Oggetto.Inizio___()/Fine____().Per alcune classi CLR questi metodi asincroni sono già definiti e ovviamente desideri utilizzarli quando saranno disponibili.
  • ThreadPool.QueueUserWorkItem().Usalo la maggior parte delle volte per creare i tuoi thread.
  • Delegate.BeginInvoke()/EndInvoke().Puoi avvolgere qualsiasi metodo in questo modo.
  • Discussione.Inizio().Voi Potevo fallo in questo modo, ma di recente ho letto qualcosa (non ho il collegamento ora) che se QueueUserWorkItem non funziona, il metodo delegato è probabilmente migliore.

Una buona risorsa Web per conoscere il multithreading in .NET:

Una delle migliori risorse che conosco sull'argomento è il libro "threading in C#":http://www.albahari.com/threading/

Ho un'ottima panoramica di tutto ciò che uno sviluppatore .net deve comprendere per programmare applicazioni multi thread.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top