Ik heb de neiging om te vergeten dat mensen niet per se alles weten (in begeleiding noemden we het "contextuele framing" - in principe het afstemmen van je mindset met die van de persoon die je counseling). Met dit in gedachten, hier is een eenvoudige die ik vergeten veel prople niet weet - hoe noem je een methode asynchroon, bijvoorbeeld, hoe stuur je een e-mail zonder het blokkeren van de draad van een ASP.NET pagina? Nou, .NET maakt dit ECHT gemakkelijk om te doen.
Dus je weet waarschijnlijk dat het versturen van e-mail in ASP.NET makkelijk is:
gebruik van systeem;
gebruik van System.Web.Mail;
namespace ExtraControls
{
///
/// Samenvatting van de beschrijving van MailSender.
///
publieke klasse MailSender
{
publieke leegte SendMail(string vanAddress,string naarAddress, string subjectLine,string messageText)
{
SmtpMail.Send(fromadress,toadress,subjectLine,messageText);
}
}
}
Juist, dus dit stuurt naar localhost, eenvoudige e-mail, hoe maak je dit Asynchrone?
gebruik van systeem;
gebruik van System.Web.Mail;
namespace ExtraControls
{
///
/// Samenvatting van de beschrijving van MailSender.
///
publieke klasse MailSender
{
publieke leegte Main(string fromAddress,string toAddress, string subjectLine,string messageText)
{
SendMailDelegate del = new SendMailDelegate(SendMail);
AsyncCallback callback = nieuwe AsyncCallback(EndSendMail);
IAsyncResult ar = del.BeginInvoce(vanadress,naaradress,subjectLine,messageText,callback,null);
}
publieke leegte EndSendMail(IAsyncResult ar)
{
SendMailDelegate del = (SendMailDelegate)ar.AsyncState;
proberen
{
del.EndInvoke(ar);
}
vangst
{
//Of behandel de uitzondering hier...
gooien;
}
}
publieke gedelegeerde ongeldig SendMailDelegate(string fromAddress,string toAddress, string subjectLine,string messageText);
publieke leegte SendMail(string vanAddress,string naarAddress, string subjectLine,string messageText)
{
SmtpMail.Send(fromadress,toadress,subjectLine,messageText);
}
}
}
Juist, dus heel wat dingen toegevoegd hier - je zult zien dat er een gedelegeerde genaamd SendMailDelegate - die in wezen fungeert als een methode pointer laat u de SendMail methode afvuren op een nieuwe draad. De werkelijke 'vuren' vindt plaats met behulp van de del.BeginInvoke(...) lijn. De AsyncCallback gespecificeerd voor die lijn geeft ons een haak in een methode die branden na de SendMail methode voltooid - dit is waar je fouten kunt behandelen zoals ik heb aangegeven, het is ook waar je kunt noemen de EndInvoke voor de gedelegeerde.
Nu is het strikt genomen niet nodig om de EndSendMail methode te gebruiken om de 'EndInvoke' te noemen - maar het is de beste praktijk om potentiële geheugenlekken te voorkomen. Dus dat is het, wanneer je iets asynchroon wilt doen dat het essentiële patroon is dat je wilt gebruiken (er zijn er andere zoals het starten van nieuwe threads etc... maar dit is de meest voorkomende).
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.