下面的代码似乎应该吞下 try 块中的任何类型的异常,但是 IIS 工作进程会因为未处理的异常(标有注释)而定期终止并重新启动。
try
{
while (true)
{
DispatcherTask task = null;
lock (sync)
{
task = this.getTask();
if (task == null)
{
Monitor.Wait(sync);
continue;
}
}
lock (task)
{
task.Result = task.Task.DynamicInvoke(task.Params);
// ^ Delegate.DynamicInvoke(object[]) throws a TargetInvocationException
Monitor.PulseAll(task);
}
}
}
catch (Exception e)
{
}
更新:
的定义DispatcherTask
:
private class DispatcherTask
{
public Delegate Task;
public object[] Params;
public object Result;
}