【发布时间】:2016-09-13 15:09:11
【问题描述】:
好的,我有一些代码要介绍。这是NetworkStream对象的扩展方法。
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]。
-
您是否在控制台应用程序中运行?
-
@Sergey.quixoticaxis.Ivanov,不。我没有发现这方面的异常。
-
@EJoshuaS,是的...但是有什么问题?
标签: c# .net asynchronous networking async-await