Gå til innhold

Asynchronous Programming - hva er poenget?


Anbefalte innlegg

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 av invictus
Lenke til kommentar
Videoannonse
Annonse

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...