а) не долбите базу каждые 500 милисекунд. Если у вас в чате 100 человек, получается уже 200 запросов к БД в секунду. Не боитесь что база просядет? Сделайте статик класс, который в котором будет храниться ваш чат. В нем понадобится по сути 2 метода: добавить сообщение (добавляется во внутренее хранилище и в БД) и получить сообщения (из внутреннего хранилища). В статическом конструкторе при старте приложения загружаете последние сообщения в память. Учтите что надо делать класс thread-safe.
б) потоки обработки лочьте на Monitor, а при поступлении сообщения сбрасывайте его из статик класса. (см тут:
stackoverflow.com/questions/12522714/thread-syncronization-with-eventhandler )
в) думаю вам идеально подойдут тут Asynchronous Controllers из MVC. Не уверен, что в ASP.NET можно отправить thread в бэкграунд освободив поток обработки.
г) тормозит не «весь сервер», а поток из пула потоков обработки запросов. Хотя если у вас в пуле только 1 поток, то да — весь сервер
д) прежде чем браться за эту задачу рекомендую разобраться с потоками поплотнее чем «я слышал про». Все таки .NET не php, и тут уровень вхождения выше, хотя возможно кажется, что тут все легко.
е) я понимаю когда люди пишут к
арова или с
онце, ну как слышу так и пишу. Но что, скажите, что заставляет вас писать «в этом случа
и»? Даже произносится же через е.