Abbiamo una situazione in cui la nostra applicazione a volte solleva uno ExecutionEngineException
. Ho pensato che quando dovesse accadere, l'applicazione dovrebbe bloccarsi, ma non si blocca. E anche se il visualizzatore di eventi afferma che l'applicazione è stata chiusa, continua a essere in esecuzione! Sembra solo che il thread offensivo sia stato ucciso silenziosamente.Come causare .NET 4 per lanciare ExecutionEngineException?
Il problema è che non siamo in grado di ricreare le condizioni quando si verifica - il codice sospetto viene eseguito migliaia di volte prima che si verifichi l'eccezione. Non c'è nulla nei registri. In breve - siamo perplessi.
Mi piacerebbe essere in grado di generare questa eccezione a piacimento per imparare come si comporta la nostra applicazione quando accade. Naturalmente, deve essere lanciato dal framework stesso, l'emissione di throw new ExecutionEngineException
non conta.
Quindi, la mia domanda è: come posso farlo in modo affidabile? Per favore, fornire un esempio di codice.
Siamo sul .NET 4, spostando presto per .NET 4.5
Sono abbastanza convinto che le AEE possano verificarsi in circostanze meno stressanti. Navigando sul Web si crea un'impressione che il codice IL emesso in modo dinamico può comportare un'eccezione del genere. – mark
Se il codice IL è un codice "hand-crafted" buggy, come prima ipotesi sarebbe più probabile che il tuo problema sia riproducibile in modo coerente.Il problema si verifica solo "a volte" come un primo indizio su alcune questioni relative alle risorse esaurite o alle condizioni di gara. Comunque, sono tutte cause possibili e non avrai altro modo di controllare ognuna di queste possibilità finché non avrai trovato la causa del problema :( – elgonzo