【问题标题】:host.OnAppDisposing Intermittently Invokedhost.OnAppDisposing 间歇性调用
【发布时间】:2021-01-26 23:46:43
【问题描述】:

当希望使用 OWIN 处理 IDisposable 对象时,广泛建议使用主机提供的 CancellationToken,如果它可用,如下所示:

var context = new OwinContext(builder.Properties);

var token = context.Get<CancellationToken>("host.OnAppDisposing");

if (token != CancellationToken.None)
{
    token.Register(() =>
    {
      disposable.Dispose();
    });
}

我已经使用foreach 中的上述代码注册了大约 12 个要处置的对象,我发现其中一些对象将全天被调用,给我留下一些资源 MIA,而其他对象则保持不变什么都没发生。

不幸的是,host.OnAppDisposingCancellationToken 本身的文档提供的信息很少。前者没有提到生命周期,后者没有提到对Register的限制。

在 IIS 上运行的长期运行的 ASP.NET 应用程序中,是否有一致且有据可查的方法来处理资源处置?

【问题讨论】:

标签: c# asp.net iis owin


【解决方案1】:

在 ASP.NET 中托管长期存在的资源似乎是一种反模式。虽然我找不到支持任一方向的文档,但我发现很多喋喋不休的人表明这是事实。

我已经将长期存在的对象移到了一个 Windows 服务中,该服务已经运行了几个星期,没有任何问题。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多