... нормально ли запускать метод asyn c в отдельном потоке ...
Я думаю, что вы в корне неправильно понимаете методы asyn c. Вызов асинхронного c метода не создает новый поток и не выгружает весь метод в любой другой поток. Вызов асинхронного c метода аналогичен вызову любого другого метода, но он может в какой-то момент возвращает выполнение обратно вызывающей стороне (с заданием в качестве обещания) и завершает оставшееся задание в некоторый момент.
Хотя есть возможность раскрутить постоянно работающий слушатель periodi c, используя метод asyn c, это скорее против его цели.
Когда вы вызываете метод asyn c, вы ожидаете, что он будет завершен в течение разумного времени (отсюда и причина, по которой вы хотите его дождаться), но для этого может потребоваться достаточно много времени. В вашем случае вам следует явно запустить новую фоновую задачу или поток, что проверяет periodi c. Это может быть новый поток или, что лучше, новая задача (например, Task.Run).
Из того, что я видел, я не должен запускать асин c код в фоновом потоке, как этот , но почему?
Согласно вашим комментариям DirectoryVM.StartListen()
запускает постоянно запущенное прослушивание, что не обязательно должно быть асин c. Если он не выполняет асинхронные c вызовы, это не что-то ожидаемое.
Разве это не быстрее, чем выполнение кода syn c в фоновом потоке?
Asyn c не о скорости, а о блокировке потоков. Не имеет значения, является ли поток передним или задним, использование асин c метода для операции ввода-вывода, например, вызов конечной точки http или отправка пакета UDP, всегда выгодно, если поток может делать другие вещи во время ожидания, или в противном случае блокировка этого потока может вызвать другие проблемы.
Кроме того, я думаю, это не сильно отличается, но на моем сервере я создам постоянный работающий поток, который прослушивает tcp-соединения и отправляет файлы через него, если Я делаю функцию отправки файла asyn c или нет?
Вы должны, если это выгодно. Смотрите предыдущую часть.