[Mono-list] How consistent are exceptions?

Alan alan.mcgovern at gmail.com
Wed Feb 13 16:46:31 UTC 2013


This approach will not work. You may not get an exception, you may
just end up looping forever inside the dictionary. This is not a
theoretical issue, it is something which does happen in the wild when
you mutate a dictionary while iterating it.

Alan

On 13 February 2013 16:08, edward.harvey.mono
<edward.harvey.mono at clevertrove.com> wrote:
> I have a dictionary, and I want to read it from one thread, while possibly
> modifying it from another thread.  In the event when one thread modifies it
> while another thread is enumerating it, I actually *want* the change to
> occur, and I want the enumerating thread to be aware a change has occurred.
>
>
>
> The best way I know is to let the exception occur, and simply handle the
> exception.
>
>
>
> Problem is, the exception type is InvalidOperationException, which is pretty
> generic.  So I need to handle InvalidOperationException, and look inside it,
> to see if "Collection was modified" is the cause of the exception.  Right
> now, the only way I know to do it is like this:
>
>
>
>            catch (InvalidOperationException e)
>
>             {
>
>                 if (e.Message == "Collection was modified; enumeration
> operation may not execute.")
>
>
>
> This seems a little kludgy...  First of all, can I be guaranteed the string
> will remain exactly the same, across platforms, and different versions of
> .Net and mono?  Second of all, it's a string comparison.  If it works, I
> don't mind it.  It will happen rarely enough that I'm willing to pay the
> performance of string comparisons.  The important goal is to accurately and
> reliably catch the right exception, on different platforms.
>
>
>
> Thanks for suggestions...
>
>
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>


More information about the Mono-list mailing list