Итак, ниже мой код для программы, связанной с сервером, над которой я работаю. В настоящий момент он довольно голый, но я намерен начать разработку, как только смогу сортировать этот материал.Threading With Async?
Сегодня вопрос, связанный с резьбой, относится к полезности нижнего сегмента приведенного ниже кода.
Если единственный цикл, который у меня есть, это цикл в StartListening, а в конструкторе для этого класса я делаю экземпляр Thread (по моему мнению, это то же самое, что создать задачу с TaskCreationOptions.LongRunning, я знаю, что задача лучше, но на самом деле мне не нужны какие-либо функции задачи, мне просто нужен поток за пределами threadpool), и мой поток thread/ui вызывает этот конструктор (который создает поток), тогда есть ли смысл для меня асинхронно запускать StartListening?
К моему пониманию async и ожидание позволяют основному потоку делать свое дело, когда мы ждем в этом цикле. Но так как это работает на собственном потоке, есть ли смысл для меня снова асинхронно?
ConnectionThread = new Thread(StartListening);
ConnectionThread.Name = "Connection Handle";
ConnectionThread.Start();
-------------------------- над этим верхний сегмент ----------- --------------
public async void StartListening()
{
listener = new TcpListener(15111);
listener.Start();
try
{
while (running)
{
TcpClient tcpclient = await listener.AcceptTcpClientAsync();
Client client = new Client(tcpclient, ((IPEndPoint)tcpclient.Client.RemoteEndPoint).Address.ToString());
Task handshakeTask = Task.Factory.StartNew(() => {
ClientHandle.AddToClientPool(client);
SendRequestInformation(client, 1);
});
}
}
catch (Exception e)
{
if (MainWindow.debugWindow != null)
MainWindow.mainWindowDispacter.BeginInvoke(SendDebugMessage, new Object[] { e.ToString() });
else
Console.WriteLine(e.ToString());
}
}
И так как я уже здесь, я в данный момент,
Byte[] buffer = new byte[4068];
var AmountRead = await stream.ReadAsync(buffer, 0, buffer.Length, cts);
Для получения сообщений от клиента. Похоже, я получаю слишком много данных, поскольку размер байта слишком велик. Тогда я попытался.
var AmountRead = await stream.ReadAsync(buffer, 0, t.getClientSocket().ReceiveBufferSize, cts);
и, похоже, не работает. Любые подсказки?
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Несомненно, спасибо! –
@ В самом начале: я ** настоятельно рекомендую использовать SignalR вместо голых сокетов. SignalR намного проще писать правильный код. –