C# 如何允许AsyncCallback侦听器多次运行?

C# 如何允许AsyncCallback侦听器多次运行?,c#,httplistener,C#,Httplistener,我有这个: HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://+:8080/"); listener.Start(); IAsyncResult asyncResult = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); public stati

我有这个:

 HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://+:8080/");
        listener.Start();

        IAsyncResult asyncResult = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);



public static void ListenerCallback(IAsyncResult result)
    {
        Console.WriteLine("hit");
        HttpListener listener = (HttpListener)result.AsyncState;
        // Call EndGetContext to complete the asynchronous operation.
        HttpListenerContext context = listener.EndGetContext(result);
        HttpListenerRequest request = context.Request;
        StreamReader reader = new StreamReader(request.InputStream);
        Console.WriteLine(reader.ReadToEnd());
        //Obtain a response object.
        HttpListenerResponse response = context.Response;
        // Construct a response. 
        string responseString =  "Hello world!";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
        // Get a response stream and write the response to it.
        response.ContentLength64 = buffer.Length;
        System.IO.Stream output = response.OutputStream;
        output.Write(buffer, 0, buffer.Length);
        output.Close();
        reader.Close();
    }
它是有效的。一旦如果您再次发送相同的请求,您将得不到任何回复,服务器将无法识别任何请求


我做错了什么,或者我需要做些什么才能让我的听众多听一次。有两种方法可以做到这一点:一种是循环,在循环中您将并行地接受请求,但您需要以某种方式控制并发调用的数量,另一种是在回调代码的末尾调用该方法。或者,您可以在循环中使用同步方法。

再次调用
ListenerCallback
中的
listener.BeginGetContext
。如果在
ListenerCallback
被前一个请求击中之后,但在我能够再次调用
BeginGetContext
之前,有一个请求传入,会发生什么?这第二个请求会被丢弃吗?我在文档中找不到这一点,但通过查看API和谷歌搜索,似乎请求会排队。您可以通过将Thread.Sleep()放在请求处理代码中并同时触发另一个请求来轻松测试这一点。此外,如果您希望一次处理一个请求,那么可能值得研究同步方法。