Capisco il threading in teoria ma non in pratica in .net
-
09-06-2019 - |
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?
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.