Необходимо асинхронно читать данные из сокета (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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я новичок в C# и что бы хоть не много попрактиковаться решил попробовать написать бота для телеграмаВсё бы ничего но у меня не получается создать...