我有一个方法:
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);
它有同样的问题。
有什么想法吗?