C# 以异步方式发送电子邮件

C# 以异步方式发送电子邮件,c#,asp.net-mvc,asynchronous,C#,Asp.net Mvc,Asynchronous,我想使用smtp客户端发送电子邮件。这个操作应该在其他线程中执行,以便重定向到索引页。到目前为止,我已经编写了以下代码 private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, System.Net.Mail.MailMessage m) { smtp.Send(m); return 0; } 此建议正确吗?您可以将SendEmail的实现更改为: private async Task<

我想使用smtp客户端发送电子邮件。这个操作应该在其他线程中执行,以便重定向到索引页。到目前为止,我已经编写了以下代码

private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, System.Net.Mail.MailMessage m)
{
    smtp.Send(m);
    return 0;
}

此建议正确吗?

您可以将SendEmail的实现更改为:

private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, 
System.Net.Mail.MailMessage m)
{
    await smtp.SendAsync(m).ConfigureAwait(false);
    return 0;
}
private async Task sendmail(System.Net.Mail.SmtpClient smtp,
System.Net.Mail.MailMessage)
{
等待smtp.SendAsync(m).ConfigureAwait(false);
返回0;
}
另请参见以下url:

始终异步
不要混合使用块代码和异步代码

配置上下文

如果可以,请使用ConfigureAwait(false)。

标记为
async
的方法还应使用
await
执行
async
操作。如果不是这样,那么你就不应该使用
async
,如果它也不返回
任务
/
任务
,那么也将其删除,让它返回一个int。最后,如果它是一个异步方法,如果返回类型是
void
,那么只返回
任务
。很难说什么是“正确的”不知道你想做什么,为什么。但是,此代码中没有启动线程的内容,
Send
方法不是异步的,因此我不确定您现在在做什么。没有创建线程的
async
/
wait
。除非
等待创建线程的内容,否则不会创建新线程。
private async Task<int> SendEmail(System.Net.Mail.SmtpClient smtp, 
System.Net.Mail.MailMessage m)
{
    await smtp.SendAsync(m).ConfigureAwait(false);
    return 0;
}