.NET Closure的行为 - 可能与反射有关

时间:2014-10-03 01:36:19

标签: c# reflection closures

我有一个方法:

private Func<RQ, Task<RS>> RqRsAsyncHandler<RQ, RS>(string pName, Func<RQ, RS> handler)
        where RQ : Message
        where RS : Message
    {
        var pInfo = new RunningProcessInfo() { Name = pName };
        RunningProcesses.Add(pInfo);

        return (RQ rq) =>
        {
            // I have some code here that uses pName, and it's working...

            pInfo.SetLastOp(DateTime.Now);

            return Task.Factory.StartNew(() =>
            {
                return handler(rq);
            });
        };
    }

我使用反射来执行此方法,并将结果作为参数传递给另一个处理程序 - 所有这些都与预期/期望完全一样。

行不通的是:

pInfo.SetLastOp(DateTime.Now);

据我所知,它永远不会被召唤。如果我在它上面设置一个断点,它就不会被击中。如果我在SetLastOp中设置断点,则该断点不会被击中。如果我在那里调用Console.WriteLine,它就不会打印(但是在传入的&#34;处理程序&#34;中有一个Console.WriteLine)。

是什么给出的?我错过了一些明显的东西吗它与反射有关吗?为什么这行代码看起来不可见?

我有另一个版本没有将调用包装到Task中的处理程序中,所以:

return Task.Factory.StartNew(() =>
{
    return handler(rq);
});

只是:

return handler(rq);

它有同样的问题。

有什么想法吗?

0 个答案:

没有答案