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

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Imported mostlylucidcouk

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

Tuesday, 06 July 2004

У мене є схильність забувати, що люди не обов'язково знають все (на основі порад ми називали це "контекстальне обрамлення" - в основному співвідношування вашого розуму з людиною, якій ви даєте пораду). Пам' ятаючи про це, ось простий приклад, про який я забув багато профілактичних пропозицій, - як ви називаєте метод асинхронно, наприклад, як ви надсилаєте електронну пошту, якщо не блокуєте нитку сторінки 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 " - але краще робити так, щоб потенційна пам' ять протікала. Отже, це все, коли ви бажаєте зробити щось синхронно, це основний шаблон, яким ви будете користуватися (є ще інші, наприклад, запуск нових ниток тощо... але це найпоширеніший приклад).

logo

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