.NET“Timer”会阻止其他方法调用吗?

时间:2010-06-15 10:20:33

标签: .net asp.net

在ASP.NET 3.5中,我们怀疑由“Timer”触发的委托将阻止其他方法调用。从日志中,一些函数调用将等待委托的完成并继续工作。

这是真的吗?如果是,我可以采取哪些解决方法?

PS:委托包含使用WCF检索数据的代码和以下代码

    private void Replace<T>(ref IList<T> src, IList<T> des)
    {
        lock(src)
        {
            while (src.Count > 0)
            {
                GC.SuppressFinalize(src.ElementAt(0));
                src.RemoveAt(0);
            }
            GC.SuppressFinalize(src);
            src = des;
        }
    }

非常感谢。

2 个答案:

答案 0 :(得分:1)

这取决于您使用的Timer实施 - 至少有三个。如果你使用的Timer只是在没有同步对象的线程池上触发,那么它应该不是问题。

当然,您在调用期间锁定的事实将阻止锁定同一对象的任何其他内容。

答案 1 :(得分:0)

这与您的具体问题无关,但代码中的GC.SuppressFinalize调用对我来说是一个巨大的危险信号。由于其预期目的,其使用通常仅限于IDisposable接口的实现。你在这里使用它的方式可能导致资源泄漏。请阅读Implementing Finalize and Dispose to Clean Up Unmanaged Resources以获取更多信息。