Хорошо, у меня есть код для представления. Вот метод расширения для объекта NetworkStream
.Await не дает результата
public async static Task<byte[]> ReadDataAsync(this NetworkStream clientStream)
{
byte[] data = {};
var buffer = new byte[1024];
if (clientStream.CanRead)
{
using (var ms = new MemoryStream())
{
try
{
int bytesRead;
while (clientStream.DataAvailable &&
(bytesRead = await clientStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await ms.WriteAsync(buffer, 0, bytesRead);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return data;
}
data = ms.ToArray();
}
}
else
{
Console.WriteLine("Closing clientStream.");
clientStream.Close();
}
return data;
}
И код, где я пытаюсь назвать этот метод.
public async static Task Preform(Socket client)
{
var stream = new NetworkStream(client);
var data = await stream.ReadDataAsync();
var message = await MessageFabrique.DeserializeMessage(data);
ServerCollections.Instance.ServerIssueQueue.Add(new ServerIssue
{
Message = message,
ClientStream = stream
});
}
ReadDataAsync
метод всегда возвращает меня в пустой массив. И в тот момент, когда я пытаюсь десериализовать данные, есть исключение - потому что data[0]
. Пожалуйста, помогите мне. Почему это происходит, если await
гарантирует мне результат, когда это необходимо?
Вы уверены, что не получаете и исключение в своем блоке catch? Он вернет данные [0]. –
Вы работаете в консольном приложении? – EJoshuaS
@ Sergey.quixoticaxis.Ivanov, №. Я не ловил исключений в этой области. –