Omu*_*Omu 3 .net c# asp.net multithreading entity-framework-4
我有一个定期发送电子邮件的类Worker,我从App_start()上的Global.asax.cs开始
public static class Worker
{
public static void Start()
{
ThreadPool.QueueUserWorkItem(o => Work());
}
public static void Work()
{
var r = new DbContext();
var m = new MailSender(new SmtpServerConfig());
while (true)
{
Thread.Sleep(600000);
try
{
var d = DateTime.Now.AddMinutes(-10);
var ns = r.Set<Notification>().Where(o => o.SendEmail && !o.IsRead && o.Date < d);
foreach (var n in ns)
{
m.SendEmailAsync("noreply@example.com", n.Email, NotifyMailTitle(n) + " - forums", NotifyMailBody(n));
n.SendEmail = false;
}
r.SaveChanges();
}
catch (Exception ex)
{
ex.Raize();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我保持这个dbcontext活着的整个生命周期应用程序是一个很好的做法?
DbContext是一个非常轻量级的对象.
您的DbContext是否保持活动状态或者在调用之前实例化它并不重要,因为实际的数据库连接仅在您提交更改或枚举查询时打开(在这种情况下,它在枚举结束时关闭).
在你的具体情况下.这完全没关系.
有关详细信息,请阅读Linq DataContext和Dispose.
| 归档时间: |
|
| 查看次数: |
2274 次 |
| 最近记录: |