6

Tenga en cuenta este código de la aplicación de consola breve.Evite la depuración de Visual Studio rompiendo una aparente "excepción no controlada"

static void Main(string[] args) 
{ 
    try 
    { 
     Action a =() => 
     { 
      throw new ApplicationException("Oops"); 
     }; 

     var ar = a.BeginInvoke(null, null); 
     ar.AsyncWaitHandle.WaitOne(); 
     try 
     { 
      a.EndInvoke(ar); 
      Console.WriteLine("No message"); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 
    finally 
    { 
     Console.ReadKey(); 
    } 
} 

Al ejecutar Visual Studio se romperá en el throw quejándose de que su no controlada. Cuando se ejecuta fuera del depurador, el código hace lo que espero (muestra "Vaya").

¿Cómo convenzo a Visual Studio para permitir que el código se ejecute como lo haría en el mundo real?

+0

Si el lambda era un método, podría aplicar el [DebuggerNonUserCode attribute] (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx) para lograr el efecto deseado. – dtb

+0

@dtb: Vale la pena poner una respuesta, pero me gustaría ver una alternativa que me permita retener el lambda. – AnthonyWJones

+0

observación: Visual Studio se queja cuando se llama a 'ar.AsyncWaitHandle.WaitOne()', no cuando 'a.EndInvoke (ar)' que está dentro de try. –

Respuesta

Cuestiones relacionadas