Многопоточный HttpListener с ожиданием async и задачами

Будет ли это хорошим примером масштабируемого многопоточного HttpListener?

Вот как это будет делать, например, настоящий IIS?

public class Program
{
    private static readonly HttpListener Listener = new HttpListener();

    public static void Main()
    {
        Listener.Prefixes.Add("http://+:80/");
        Listener.Start();
        Listen();
        Console.WriteLine("Listening...");
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }

    private static async void Listen()
    {
        while (true)
        {
            var context = await Listener.GetContextAsync();
            Console.WriteLine("Client connected");
            Task.Factory.StartNew(() => ProcessRequest(context));
        }

        Listener.Close();
    }

    private static void ProcessRequest(HttpListenerContext context)
    {
        System.Threading.Thread.Sleep(10*1000);
        Console.WriteLine("Response");
    }
}

Я специально ищу масштабируемое решение, НЕ полагающееся на IIS. Вместо этого только на http.sys (который является классом httplistener). Причина отказа от использования iIS заключается в том, что правительство. Область, в которой я работаю, требует чрезвычайно малой площади атаки.

27
задан Jordan 20 July 2015 в 19:16
поделиться