我遇到了一个问题,我以前没有遇到过。我通过 BeginXXX/EndXX 模式异步调用一个方法,并为某些计时功能提供了一个额外的包装器,如下所示:
BeginGetStuffTimed(arguments)
{
var timingstuff = TimingStuff;
var callback = new AsyncResult(CallbackMethod);
service.BeginGetStuff(CallbackMethod, timingstuff);
}
CallbackMethodTimed(IAsyncResult result)
{
SaveTiming(result.AsyncState...);
service.EndGetStuff;
}
现在每隔一段时间就会抛出一个异常:
异步结束调用了错误的通道。参数名称:结果
因为它并不总是发生这种困惑我。我在想 IIS 无法跟上请求并变得 fubar,所以我在调用代码中添加了一个暂停,这似乎确实有效。停顿时间越长,异常发生的频率越低。
当然这不是真正的解决方案,所以我正在寻找对此事的一些见解。
编辑:经过进一步检查,这似乎与 IIS 无关,IIS 最多可以同时处理 5000 个(每个 CPU)线程。我没有接近这个极限。