# Дуже простий... як зробити багатофункціональний дзвінок у одному простому крокі

<datetime class="hidden">2004-07-06T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported -->
У мене є схильність забувати, що люди не обов'язково знають все (на основі порад ми називали це "контекстальне обрамлення" - в основному співвідношування вашого розуму з людиною, якій ви даєте пораду). Пам' ятаючи про це, ось простий приклад, про який я забув багато профілактичних пропозицій, - як ви називаєте метод асинхронно, наприклад, як ви надсилаєте електронну пошту, якщо не блокуєте нитку сторінки ASP. NET? Ну, NET робить це дуже простим.

Отже, ви, мабуть, знаєте, що надсилання ел. пошти в ASP.NET просто:

використання системи;

за допомогою System. Web. Mail;

ExplaceControls

{

///

Опис // Резюме для MailSender.

///

Public class MailSender

{

policy void SendMail}рядок з Address, string до Address, string subjectLine, string messageText)

{

SmtpMail.Send} fromAddress, toAddress, SubjectLine, messageText);

}

}

}

Правильно, так що це відправляє до localhost, простої електронної пошти, як зробити цей Asynchronous?

використання системи;

за допомогою System. Web. Mail;

ExplaceControls

{

///

Опис // Резюме для MailSender.

///

Public class MailSender

{

publiced void Main row from Address, string toAddress, string subject, string messageText)

{

SendMailDelegate del = new SendMailDelegate}SendMail);

AsyncCallback call back = new AsyncCall background } DASendMail);

IAsyncResult ar = del. BenginInvoke } fromAddress, toAddress, SubjectLine, messageText, call backward, null);

}

публічна voiddSendMail}Іасинхронізатор ar)

{

SendMailDelegate del = (SendMailDelegate) ar.AyncState;

спробувати

{

del.EndInvokeyar);

}

catch

{

/ Or, обробляти тут виняток...

кидок;

}

}

публічний делегат void SendMailDelegate}рядок з Address, підрядок до Address, string subject, string messageText);

policy void SendMail}рядок з Address, string до Address, string subjectLine, string messageText)

{

SmtpMail.Send} fromAddress, toAddress, SubjectLine, messageText);

}

}

}

Право, тут додано декілька речей - ви побачите делегата з назвою SendMailDelegate - який, по суті, працює як вказівник, який надає вам змогу запустити метод SendMail на новій гілці. Справжнє " Fifing " відбувається за допомогою рядка del. BeginInvoke}...). За допомогою AyncCallback, вказаного до того, як ця лінія надасть нам змогу скористатися інструментом, який активізується після завершення способу sendMail - саме тут ви можете впоратися з помилками, як я вже зазначив, це місце можна назвати EndInvolection для делегата.

Тепер, звичайно ж, не потрібно використовувати метод EndSendMail для того, щоб називати " endInvoke " - але краще робити так, щоб потенційна пам' ять протікала. Отже, це все, коли ви бажаєте зробити щось синхронно, це основний шаблон, яким ви будете користуватися (є ще інші, наприклад, запуск нових ниток тощо... але це найпоширеніший приклад).