尝试发送邮件,但是任务被取消。知道为什么吗?
public static Task SendAsync(this SmtpClient client, MailMessage message)
{
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
Guid sendGuid = Guid.NewGuid();
SendCompletedEventHandler handler = null;
handler = (o, ea) =>
{
if (ea.UserState is Guid && ((Guid)ea.UserState) == sendGuid)
{
client.SendCompleted -= handler;
if (ea.Cancelled)
{
tcs.SetCanceled(); // TASK CANCELLED: Why?
}
else if (ea.Error != null)
{
tcs.SetException(ea.Error);
}
else
{
tcs.SetResult(null);
}
}
};
client.SendCompleted += handler;
client.SendAsync(message, sendGuid);
return tcs.Task;
}
致电者:
using( SmtpClient smtpClient = new SmtpClient() )
{
return smtpClient.SendAsync(msg);
}
在此先感谢您的帮助!杰拉德
完成执行块时,一条using
语句将调用一个objectsDispose
方法。在smtpClient.SendAsync
不使用await
async方法的情况下进行调用将导致执行块结束并被Dispose
调用SmtpClient
,即使该SendAsync
方法仍在执行中,这也解释了为什么有些邮件会完成,有些邮件可能会在处理对象之前完成,而另一些则不会。
做这个:
using (SmtpClient smtpClient = new SmtpClient())
{
await smtpClient.SendAsync(msg);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句