Hyvin yksinkertainen...miten tehdä monisäikeinen puhelu yhdellä helpolla askeleella (Suomi (Finnish))

Hyvin yksinkertainen...miten tehdä monisäikeinen puhelu yhdellä helpolla askeleella

Tuesday, 06 July 2004

//

2 minute read

Minulla on taipumus unohtaa, että ihmiset eivät välttämättä tiedä kaikkea (neuvonnassa kutsuimme sitä "kontekstikehykseksi" - periaatteessa linjaa ajattelutapojesi ja neuvonantajan ajattelutavan välillä). Tässä mielessä tämä on yksinkertainen, jonka unohdin monilta prople ei tiedä - miten kutsutaan menetelmää asynkronisesti, esimerkiksi, miten sähköpostia lähetetään, kun se ei estä ASP.NET-sivun lankaa? No, .NET tekee tämän todella helpoksi.

Joten luultavasti tiedät, että sähköpostin lähettäminen ASP.netissä on täysin helppoa:

Järjestelmän käyttö;

käyttää System.Web.Mailia;

namespace ExtraControls

{

///

// Yhteenveto MailSenderin kuvauksesta.

///

Kansanluokan MailSender

{

Julkinen tyhjiö SendMail (string fromAddress,string toAddress, string subjectLine,string messageText)

{

SmtpMail.Lähetä(osoitteesta,osoitteesta,asiakkaasta,asiakkaasta,viestistäText)

}

}

}

Tämä lähettää paikallislähetykseen yksinkertaisen sähköpostin. Miten tästä tulee asynkronista?

Järjestelmän käyttö;

käyttää System.Web.Mailia;

namespace ExtraControls

{

///

// Yhteenveto MailSenderin kuvauksesta.

///

Kansanluokan MailSender

{

Julkinen tyhjiö Main (String fromAddress, String toAddress, String subjectLine,String messageText)

{

SenderMailDelegate del = uusi SenderMailDelegate (SendMail);

AsyncCallbackin takaisinkutsu = uusi AsyncCallback (EndSendMail);

IAsyncResult ar = del.BeginInvoke (assosiaatioasiamieheltä,asiakkaalta,asiakkaalta,viestiTextiltä, takaisinkutsulta ja null);

}

Julkinen tyhjiö EndSendMail (IAsyncResult ar)

{

SendMailDelegate del = (SendMailDelegate)ar.AsyncState;

kokeile

{

del.EndInvoke(ar);

}

saalis

{

/ / Tai hoida poikkeus täällä...

heitto;

}

}

delegaatti on mitätön SendMailDelegate (string fromAddress, string to Adress, string subjectLine, string messageText);

Julkinen tyhjiö SendMail (string fromAddress,string toAddress, string subjectLine,string messageText)

{

SmtpMail.Lähetä(osoitteesta,osoitteesta,asiakkaasta,asiakkaasta,viestistäText)

}

}

}

Aivan, joten aika monta asiaa on lisätty tähän - näet, että täällä on valtuutettu nimeltä SenderMailDelegate - joka pohjimmiltaan toimii menetelmän osoittimena, jonka avulla voit erottaa SenderMail-menetelmän uudella langalla. Todellinen 'tulitus' tapahtuu del.BeginInvoke(...) -linjalla. AsencCallback määritteli ennen kuin se antaa meille koukun menetelmään, joka syttyy sen jälkeen, kun SenderMail-menetelmä on valmis. Tässä kohtaa voit käsitellä virheitä, kuten olen ilmoittanut, ja siellä voit myös soittaa EndInvokelle valtuutetulle.

Nyt EndSendMail -menetelmää ei välttämättä tarvitse käyttää kutsumaan EndInvoke -menetelmää, mutta se on paras käytäntö mahdollisten muistivuotojen paljastamiseksi. Näin ollen aina, kun haluat tehdä jotain yhtäjaksoisesti, sitä kaavaa haluat käyttää (muitakin on, kuten aloittaa uudet langat jne., mutta tämä on yleisintä).

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.