【发布时间】:2015-02-26 19:18:37
【问题描述】:
我正在尝试编写一个帮助类来在我的 C# 应用程序中发送电子邮件。我想使用SmtpClient.SendAsync,但显然我不明白异步的工作原理,或者我的设置有误:
public class EmailService
{
public static void SendMessage(MailMessage message)
{
var client = new SmtpClient("127.0.0.1", 25);
client.SendCompleted += (s, e) =>
{
if (e.Error != null)
{
// TODO: Log the SMTP error somewhere
}
var callbackClient = s as SmtpClient;
var callbackMessage = e.UserState as MailMessage;
callbackClient.Dispose();
callbackMessage.Dispose();
};
client.SendAsync(message, message);
}
}
这会导致以下异常:
此时无法启动异步操作。异步 操作只能在异步处理程序中启动或 模块或页面生命周期中的某些事件期间。如果这 执行页面时发生异常,请确保该页面是 标记为 。此异常也可能表明 尝试调用通常不受支持的“async void”方法 在 ASP.NET 请求处理中。相反,异步方法 应该返回一个任务,调用者应该等待它。
基于这个异常,听起来我的SendMessage 方法可能需要返回一个Task。但是,client.SendAsync 返回 void,因此似乎没有任何 Task 要返回或 await。
【问题讨论】:
标签: c# asp.net smtpclient