c# - 即使在侦听器关闭后,C# HttpListener getContext 方法也会继续阻塞
问题描述
我正在使用 C# HttpListener(.Net Core 3.1,Windows)
根据以下文档,如果侦听器在等待时关闭,则 GetContext 方法预计会抛出 ObjectDisposedException。出于某种原因,即使在侦听器关闭后,方法调用仍保持阻塞状态。
代码示例来说明问题:
private static void Listen(HttpListener listener)
{
var prefixes = new List<String> { "http://localhost:8080/" };
prefixes.ForEach(s => listener.Prefixes.Add(s));
listener.Start();
Console.WriteLine("Listen: before GetContext");
try
{
listener.GetContext();
}
catch (Exception)
{
Console.WriteLine("Listen: exception was thrown");
}
Console.WriteLine("Listen: end of function");
}
private static void Main(string[] args)
{
var listener = new HttpListener();
var listeningTask = Task.Run(() => Listen(listener));
Task.Delay(1000).Wait();
Console.WriteLine("Main: before stop");
listener.Close();
Console.WriteLine("Main: before listeningTask.Wait");
listeningTask.Wait();
Console.WriteLine("Main: done!");
}
预期输出:
Listen: before GetContext
Main: before stop
Main: before listeningTask.Wait
Listen: exception was thrown
Listen: end of function
Main: Done!
实际输出:
Listen: before GetContext
Main: before stop
Main: before listeningTask.Wait
解决方案
推荐阅读
- php - curl 中的 API 密钥
- swift - 有没有办法消除 SwiftUI 中填充的外边缘?
- sql - 如何聚合维度变化缓慢的数据
- python - 在 MAP 函数中使用 for 循环
- sql - 使用 EXISTS 指令是否改进了这个查询
- python - 是否有任何选项可以检查 URL 是否有效?在将它传递给 scrapy 中的下一个函数之前,Python
- spring - 使用 @EventListener 的 Spring ExitCodeEvent 不起作用
- python - 如何将其更改为超链接?不和谐.py
- python - 向 numpy 数组添加偏差
- php - 从 url 获取文本数据并刷新它