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()放在请求处理代码中并同时触发另一个请求来轻松测试这一点。此外,如果您希望一次处理一个请求,那么可能值得研究同步方法。