Jag har en tendens att glömma att människor inte nödvändigtvis vet allt (i rådgivning vi kallade det "kontextuell inramning" - i princip anpassa ditt tänkesätt till den person du är rådgivning). Med detta i åtanke, Här är en enkel som jag glömde många prople vet inte - hur kallar du en metod asynkront, t.ex., hur skickar du ett e-postmeddelande samtidigt inte blockera tråden på en ASP.NET-sida? Tja, .NET gör detta REALLY lätt att göra.
Så, du vet förmodligen att skicka e-post i ASP.NET är död lätt:
Användning av systemet.
Använda System.Web.Mail.
namnrymd ExtraControls
{
///
// // Sammanfattning av MailSender.
///
offentlig klass MailSender
{
offentligt tomrum SendMail(sträng frånAdress, sträng tillAdress, strängämneLine, strängmeddelandeText)
{
SmtpMail.Skicka(frånAdress, tillAdress, SubjectLine,meddelandeText);
}
}
}
Okej, så detta skickar till localhost, enkel e-post, hur gör du denna Asynkrona?
Användning av systemet.
Använda System.Web.Mail.
namnrymd ExtraControls
{
///
// // Sammanfattning av MailSender.
///
offentlig klass MailSender
{
offentligt tomrum Huvud(sträng frånAdress, sträng tillAdress, strängämneLine, strängmeddelandeText)
{
SendMailDelegate del = nya SendMailDelegate(SendMail);
AsyncCallback-återkallning = ny AsyncCallback(EndSendMail);
IAsyncResultat ar = del.BeginInvoke(frånAdress, tillAdress, SubjectLine,meddelandeText, callback,null);
}
offentligt tomrum EndSendMail(IAsyncResultat ar)
{
SendMailDelegate del = (SendMailDelegate)ar.AsyncState;
försök
{
Del.EndInvoke(ar).
}
fångst
{
// Eller hantera undantaget här...
kast,
}
}
Public deleg double SendMailDelegate(sträng frånAdress, sträng tillAdress, strängämneLine, strängmeddelandeText).
offentligt tomrum SendMail(sträng frånAdress, sträng tillAdress, strängämneLine, strängmeddelandeText)
{
SmtpMail.Skicka(frånAdress, tillAdress, SubjectLine,meddelandeText);
}
}
}
Rätt, så en hel del saker läggs till här - du kommer att se att det finns en delegat som heter SendMailDelegate - som i huvudsak fungerar som en metod pekare låter dig avfyra SendMail metoden på en ny tråd. Den faktiska "avfyrning" sker med hjälp av del.BeginInvoke(...) linje. AsyncCallback anges innan den raden ger oss en krok i en metod som brinner efter SendMail metoden kompletterar - det är där du kan hantera fel som jag har angett, det är också där du kan kalla EndInvoke för delegaten.
Nu är det strikt inte nödvändigt att använda EndSendMail-metoden för att kalla "EndInvoke" - men det är bästa praxis att avoif potentiella minne läcker. Så det är det, när du vill göra något asynkront som är det viktigaste mönstret du vill använda (det finns andra som starta nya trådar etc ... men detta är den vanligaste).
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.