| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Сокеты и многопоточность |
| Автор: 123456789igor 15.9.2014, 22:25 | ||
| Здравствуйте. Есть у меня такая проблема. Никак не могу понять как организовать выполнение 2х различных задач параллельно. Есть клиент-серверное приложение. 1 метод отвечает за ожидание подключения и прием данных, 2ой метод отвечает за действия над принятыми данными. Выглядит это так
В результате хочу получить что-то вроде: запускаем приложение, метод Run запускается в новом потоке(выполнение программы идет дальше) программа крутится в цикле, пока какой-то клиент не подключится и не передаст данные. В случае если что-то получили запускаем метод isLogonOrRegistration в ещё 1ом потоке, при этом поток, в котором Run, работает и ждет следующего подключения. Никак не могу понять как это сделать Если у вас есть идея как эту логику реализовать по другому- напишите пожалуйста. собственно сама логика: Этот кусок кода- это сервер. Клиент вводит креды и отправляет их серверу(сервер может обрабатывать подключения множества клиентов) далее сервер проверяет верные креды ли ввел пользователь. Никак не получается сделать это параллельно. Прошу совета. |
| Автор: Ilya81 17.9.2014, 14:10 | ||
Хоть с использованием оператора await я ещё не полностью освоился, но всё равно полагаю, что ожидающий поток - не самое подходящее для него применение. Рекомендую использовать EventWaitHandle с автоматическим сбросом. Т. е. ожидающий поток считывает все данные, после чего, пройдя цикл, останавливается на WaitOne. При чьём-то подключении вызывается метод Set и данные вновь считываются, затем поток вновь ждёт. Примерно так:
Метод Loop выполняется в некотором потоке. |
| Автор: WERITAS 29.10.2014, 14:21 |
| Класс EventWaitHandle используют пул потоков CLR, а в нём их число ограниченно (по-моему 25). Поэтому если подключаться более 25-ти клиентов, то 26-му придётся ждать пока поток в пуле не освободится. Серверную часть приложения, работающего со множеством подключений, делают через Thread. А пул потоков используют для совершенно других задач по распараллеливанию! |
| Автор: Cheloveck 29.10.2014, 16:08 | ||
Как-то так...
Никаких асинков и эвейтов не надо тут, на вроде как. |