2013-02-20 14 views
9

मैं एक ऐसी विधि बनाने का प्रयास कर रहा हूं जो टीसीपी क्लाइंट कनेक्शन स्वीकार करता है और ग्राहक कनेक्ट होने के बाद एक कार्य करता है, "कनेक्टेड एक्शन"। मुझे प्रतिनिधि "कनेक्टेड एक्शन" चलाने के लिए बनाया गया नया कार्य करने का प्रयास करते समय संकलन त्रुटि प्राप्त हो रही है।टास्क.रुन का उपयोग कैसे करें (एक्शन <T>)

तर्क 1: से परिवर्तित नहीं कर सकते 'शून्य' 'System.Func' के लिए

मेरा मानना ​​है कि क्योंकि विधि "ConnectedAction" विधि चलाने के लिए और करने के लिए वापस शून्य करने के लिए कोशिश कर रहा है इस त्रुटि है कि कार्य। रुन पैरामीटर।

मेरे पास कार्य "कनेक्टेड एक्शन" प्रतिनिधि कैसे चला सकता है?

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)); 
     } 
    } 
} 

उत्तर

14

आप लिखना चाहिए:

Task.Run(() => ConnectedAction(tcpClient)); 

यह एक लैम्ब्डा समारोह है कि कोई पैरामीटर लेता है और सही तर्क के साथ अपने निर्दिष्ट समारोह कॉल करेंगे बनाता है। लैम्ब्डा को Task.Run पैरामीटर द्वारा आवश्यक प्रतिनिधि प्रकार में स्पष्ट रूप से लपेटा गया है।

आपने जो लिखा वह फ़ंक्शन कॉल करता है और फिर फ़ंक्शन के रिटर्न वैल्यू को एक प्रतिनिधि में बदलने का प्रयास करता है।

+0

बिल्कुल वही जो मैं खोज रहा था। धन्यवाद! –

संबंधित मुद्दे