Wie zu verwenden Aufgabe.Ausführen(Aktion<T>)
Ich bin versucht, erstellen Sie eine Methode, die akzeptiert TcpClient-verbindungen und eine Aufgabe erfüllt, sobald ein client verbunden ist, "ConnectedAction". Ich bekomme einen kompilieren Fehler beim Versuch, eine neue Aufgabe erstellt und führt den Delegaten "ConnectedAction".
Argument 1: cannot convert from 'void' zu 'System.Func'
Ich glaube, dass dieser Fehler, weil die Methode versuchen, die "ConnectedAction" - Methode und "void" zurückgeben, um die Aufgabe.Run parameter.
Wie kann ich die Aufgabe haben, führen Sie die "ConnectedAction" delegieren?
class Listener
{
public IPEndPoint ListenerEndPoint {get; private set;}
public int TotalAttemptedConnections { get; private set; }
public Action<TcpClient> ConnectedAction { get; private set; }
public Listener(IPEndPoint listenerEndPoint, Action<TcpClient> connectedAction)
{
ConnectedAction = connectedAction;
ListenerEndPoint = listenerEndPoint;
Task.Factory.StartNew(Listen, TaskCreationOptions.LongRunning);
}
private void Listen()
{
TcpListener tcpListener = new TcpListener(ListenerEndPoint);
tcpListener.Start();
while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
TotalAttemptedConnections++;
//Error here
Task.Run(ConnectedAction(tcpClient));
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie schreiben:
Dies erzeugt eine lambda-Funktion, die keine Parameter und ruft die angegebene Funktion mit dem richtigen argument. Der lambda-Ausdruck ist implizit verpackt in die delegate-Typ benötigt durch die
Task.Run
Parameter.Was du geschrieben hast, der die Funktion aufruft und dann versucht, drehen Sie den Rückgabewert der Funktion in einer delegieren.