Comment utiliser les groupes de travail.Exécuter(Action<T>)
Je suis de la tentative de créer une méthode qui accepte TcpClient connexions et effectue une tâche une fois qu'un client est connecté, "ConnectedAction". Je reçois une erreur de compilation quand on cherche à avoir une nouvelle tâche créée pour exécuter le délégué "ConnectedAction".
Argument 1: impossible de convertir de 'vide' pour 'Système.Func'
Je crois que cette erreur est parce que la méthode est d'essayer d'exécuter la "ConnectedAction" méthode et de retour void à la Tâche.Paramètre d'exécution.
Comment puis-je avoir de l'exécution d'une Tâche de la "ConnectedAction" délégué?
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));
}
}
}
OriginalL'auteur James Harmon | 2013-02-20
Vous devez vous connecter pour publier un commentaire.
Vous devriez écrire:
Cela crée une fonction lambda qui ne prend aucun paramètre et appelez votre fonction spécifiée avec le bon argument. Le lambda est implicitement contenu dans le type de délégué nécessaires par la
Task.Run
paramètres.Ce que vous avez écrit appels de la fonction, puis tente de tourner la valeur de retour de la fonction dans un délégué.
OriginalL'auteur David Pfeffer