Ich versuche, eine Erweiterungsmethode für die generischen Delegaten Action<T>
in der Lage sein, um einfache asynchrone Aufrufe auf Action<T>
Methoden zu erstellen. Es besteht im Wesentlichen implementiert nur das Muster, wenn Sie möchten, das Verfahren auszuführen und kümmern sich nicht um sie Fortschritt ist:Wie wird diese Erweiterungsmethode kompiliert?
public static class ActionExtensions
{
public static void AsyncInvoke<T>(this Action<T> action, T param) {
action.BeginInvoke(param, AsyncActionCallback, action);
}
private static void AsyncActionCallback<T>(IAsyncResult asyncResult) {
Action<T> action = (Action<T>)asyncResult.AsyncState;
action.EndInvoke(asyncResult);
}
}
Das Problem ist, dass es wegen der zusätzlichen <T>
nicht kompiliert werden, die die AsyncActionCallback
generic macht und habe eine andere Signatur als erwartet. Die Signatur void AsyncActionCallback(IAsyncResult)
wird erwartet.
Wer weiß, wie dies zu umgehen oder accomlish, was ich tun möchte?
Das ist ein Weg :) Gutes Denken. – leppie
Super, vielen Dank für die blitzschnelle Antwort! Es ist interessant, wie Lambdas etwas ermöglichen, was vorher nicht möglich war. Ich denke, es ist schließlich nicht nur Zucker! –
Beachten Sie, dass dieser Ansatz dazu führen kann, dass Fehler, die während des Aufrufs auftreten, auf dem Boden gelöscht werden. Möglicherweise möchten Sie den Inhalt des Lambda innerhalb eines try {} catch {} umbrechen. –