执行以下操作是否可以接受:
Attachment attachment = new Attachment(path, mediaType);
//Do other stuff...
using(attachment)
{
//Send email
}
Run Code Online (Sandbox Code Playgroud)
我通常直接在using语句中创建我的一次性,但在这种情况下,它有点复杂.
背景
我刚刚遇到遗留应用程序中的错误,其中电子邮件附件未释放文件句柄.因此,该文件无法再被修改,因为它已在使用中.
似乎问题是程序员忘了在附件上调用Dispose().通常,这将是一个容易解决的问题,但在这种情况下,由于代码的结构,我无法在创建时直接将附件直接放入使用中.
替代方案是否是一个良好的妥协?
真正的问题是您不需要Dispose the Attachment,因为MailMessage会在您调用MailMessage上的Dispose时自动处理附件.
using(MailMessage message = ...)
{
}
Run Code Online (Sandbox Code Playgroud)
查看MailMessage类的内部,您将看到正在处理附件集合(附件):
protected virtual void Dispose(bool disposing)
{
if (disposing && !disposed)
{
disposed = true;
if(views != null){
views.Dispose();
}
if(attachments != null){
attachments.Dispose();
}
if(bodyView != null){
bodyView.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
https://referencesource.microsoft.com/#System/net/System/Net/mail/MailMessage.cs
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |