2010-04-12 16 views
5

A volte, quando si esegue un'applicazione Mono .NET (sembra non dipendere dai dati di input, poiché non cambia), mi imbatto nella seguente situazione: quando cercando di dequeue un elemento da un (non vuota, posso controllare il conteggio anticipo) Queue, viene generata un'eccezione:L'operazione non è valida a causa dello stato corrente dell'oggetto

eccezione non gestita: System.InvalidOperationException: Operazione non è valida a causa dello stato corrente dell'oggetto in System.Collections.Generic.Queue 1[DBWorkItem].Peek()[0x00000] at System.Collections.Generic.Queue 1 [DBWorkItem] .Dequeue() [0x00000] in DBProcessor.process (System.Object q) [0x0006b] in < ...>

Anche se posso certamente cogliere questa eccezione, l'elemento viene rimosso dalla coda e perso. Qualcun altro ha riscontrato questo comportamento anche tu?

+0

Accedete a questa coda da più thread? –

risposta

5

Avete più thread che utilizzano questa coda? Può essere non vuoto quando si controlla il conteggio, ma poi si svuota quando si tenta di sbirciare l'oggetto.

Se si dispone di un programma breve ma completo che dimostri il problema, possiamo dirlo con certezza. Naturalmente, è possibile che sia un bug Mono, anche se la mia esperienza è che i framework di sistema sono solitamente più robusti del codice che li chiama.

+0

Sto effettivamente utilizzando diversi thread, tuttavia ogni thread ha una propria coda (contenente gli elementi di lavoro da attivare sul database), quindi questo non dovrebbe essere un problema. Comunque, proverò a investigarlo. Purtroppo, il codice è troppo complesso per postarlo qui ... – DBa

+0

@DBa: Quindi prendi il codice e martellalo finché non è * non * troppo complesso da postare qui. Tu * dici * che ogni thread ha la sua coda - quanto sei sicuro che sia davvero così? Questa potrebbe essere l'intenzione, ma se due thread stanno controllando la stessa coda, questo potrebbe essere il problema. –

+0

@DBa, hai trovato una soluzione per questo problema? Qualsiasi aggiornamento? Aiuto apprezzato, grazie! – Tate

Problemi correlati