Необходимо асинхронно читать данные из сокета (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);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости