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?
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
@dtb: Vale la pena poner una respuesta, pero me gustaría ver una alternativa que me permita retener el lambda. – AnthonyWJones
observación: Visual Studio se queja cuando se llama a 'ar.AsyncWaitHandle.WaitOne()', no cuando 'a.EndInvoke (ar)' que está dentro de try. –