Während eine .NET Reflector für eine App um einige Code Stossen mit ich nicht den Quellcode haben, fand ich diese:Was ist der Zweck dieser Delegatennutzung?
if (DeleteDisks)
{
using (List<XenRef<VDI>>.Enumerator enumerator3 = list.GetEnumerator())
{
MethodInvoker invoker2 = null;
XenRef<VDI> vdiRef;
while (enumerator3.MoveNext())
{
vdiRef = enumerator3.Current;
if (invoker2 == null)
{
//
// Why do this?
//
invoker2 = delegate {
VDI.destroy(session, vdiRef.opaque_ref);
};
}
bestEffort(ref caught, invoker2);
}
}
}
if (caught != null)
{
throw caught;
}
private static void bestEffort(ref Exception caught, MethodInvoker func)
{
try
{
func();
}
catch (Exception exception)
{
log.Error(exception, exception);
if (caught == null)
{
caught = exception;
}
}
}
Warum nicht direkt VDI.destroy()
nennen? Ist das nur ein Weg, das gleiche Muster von try { do something } catch { log error }
zu wickeln, wenn es viel benutzt wird?
Ja, das ist, was ich dachte. Vielen Dank. – Kev