Я работаю с 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