abcd423417984 Skrevet 17. juli 2006 Del Skrevet 17. juli 2006 (endret) Har sett litt på Asynchronous Programming i C#.NET i det siste og fatter ikke poenget med det. Bruksområdet er definert til å være for å unngå blokkerende kall i GUI-tråden for å hindre at GUI'et henger seg under blokkering. Men jeg fant nettopp ut at disse callback'ene som blir kjørt for å indikere at en asynchronous operasjon er ferdig faktisk kjører i en annen tråd, og at å oppdatere GUI i en annen tråd faktisk fører med seg bråk i .NET 2.0. (i java/swing kan dette løses med invokeLater() som putter kode på GUI-trådens eventdispatcher) Jeg vil faktisk gå så langt som å si at mange av disse typiske bruksområdene for denne typen programmering bør kunne løses med egne tråder mye enklere og mer elegant enn hva de innebygde klassene for Asynchronous Programming kan tilby. Så hva er fordelen med Asynchronous Programming fremfor å bruke tråder? Virker jo som det er akkurat det samme. Endret 17. juli 2006 av invictus Lenke til kommentar
j000rn Skrevet 17. juli 2006 Del Skrevet 17. juli 2006 Asyncron kode gjør det hakket enklere enn å bruke tråder. I .Net 2.0 kan det gjøres enda enklere ved å bruke BackgroundWorker som gir deg 2 event'er som kjøres på samme tråd som GUI biten (OnComplete og OnProgress). Vanlig asynkron kode har også en event som kjører når den er ferdig. Bruksområder: * (Som du sa)Unngå blokkerende kall i GUI-tråden for å hindre at GUI'et henger seg under blokkering. * Gjøre flere ting samtidig, og dermed spare tid. F.eks. om man skal hente ut data fra 2 forskjellige databaser samtidig. Hvert kall tar 10 sec. Og ved å kjøre dem asynkront tar de 10 sec til sammen, mens synkront bruker de 20 sec. Altså går det dobbelt så fort for brukeren * Gjøre oppgaver i bakgrunnen. Server-programmering hvor man har mange connections f.eks. Lenke til kommentar
abcd423417984 Skrevet 17. juli 2006 Forfatter Del Skrevet 17. juli 2006 Men er asyncron kode bare en wrapper rundt tråder slik som jeg mistenker? Noen spesiell måte å løse dette GUI-problemet jeg nevnte? Jeg ville trodd at beste fremgangsmåte var at tråden som kjører de asyncrone eventene burde være den samme som startet det i utgangspunktet, men slik virker det altså ikke som det er, noe som i mine øyne gjør hele konseptet ganske ubrukelig når jeg kan lage det nøyaktig samme selv med enkle tråder. Lenke til kommentar
j000rn Skrevet 17. juli 2006 Del Skrevet 17. juli 2006 (endret) Du kan gjøre det enkelt og dirty ved å sette: Control.CheckForIllegalCrossThreadCalls = false; (kun .Net 2.0 tror jeg) http://www.codeproject.com/csharp/managedt...0&select=998363 http://www.interact-sw.co.uk/iangblog/2004/09/23/threadless Endret 17. juli 2006 av jorn79 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå