1

我想在支付保存对 DbContext 的更改的成本之前将响应返回给客户端。我可以在返回响应后保存更改吗?由于上下文已被释放,简单地将其放入 ThreadPool.QueueUserWorkItem 会失败。

谢谢!

4

1 回答 1

2

在这种情况下,您处理 DbContext 时的逻辑太复杂而无法使用using块;您需要手动处理。您的代码可能看起来更像:

DbContext context = null;
try
{
    context = new DbContext();
    var query = context.GetStuff();

    ThreadPool.QueueUserWorkItem(_ =>
    {
        try
        {
            context.SaveChanges();
        }
        finally
        {
            context.Dispose();
        }
    });
}
catch
{
    //dispose of the context only if there was an exception, as it 
    //meant we weren't able to get into the async task and dispose of it there
    if (context != null)
        context.Dispose();

    throw;
}
于 2013-03-07T20:39:17.567 回答