Необходимо асинхронно читать данные из сокета (NetworkStream
) и выполнять действия в зависимости от считанных данных. В бескрайних просторах интернета встречается несколько парадигм, две из которых EAP (event-based asynchronous programming) и TAP (task-based asynchronous programming).
Второй вариант хорошо подходит для моей задачи, но, увы, ключевые слова async
и await
введены с 5-й версии C#, которую Unity (на которой у меня проект) не поддерживает. По EAP не нашёл понятных примеров, поэтому слабо представляю, как им пользоваться.
Подскажите, как реализовать асинхронное чтение из сокета?
NetworkStream
не поддерживает EAP. Кроме TAP он поддерживает APM методами BeginRead()
/EndRead()
. APM -- это asynchronous programming model, самая первая реализация асинхронного программирования в .NET.
Процесс чтение данных при этом будет выглядеть примерно так:
AsyncCallback callback =
ar =>
{
int bytesRead = myNetworkStream.EndRead(ar);
// обрабатываем полученные данные
// при необходимости снова читаем данные
networkStream.BeginRead(buffer, offset, count, callback, null);
};
// первоначальный вызов,
// networkStream как вариант можно передавать в качестве последнего параметра,
// а затем получать его из IAsyncResult.AsyncState
networkStream.BeginRead(buffer, offset, count, callback, null);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я новичок в C# и что бы хоть не много попрактиковаться решил попробовать написать бота для телеграмаВсё бы ничего но у меня не получается создать...