這是從Socket
讀取數據的好方法嗎?異步/等待插座接收數據問題
public class StateObject : IDisposable
{
private const int _bufferSize = 1024;
public byte[] Buffer { get; } = new byte[_bufferSize];
public int BufferSize { get; } = _bufferSize;
public MemoryStream MsStream { get; }
public EnhStateObject()
{
MsStream = new MemoryStream();
}
public void Dispose()
{
MsStream.Dispose();
}
}
public async static Task<int> ReceiveAsync(this Socket client, StateObject state)
{
var task = await await Task<int>.Factory.FromAsync(
(cb, s) => client.BeginReceive(state.Buffer, 0, state.BufferSize, SocketFlags.None, cb, s),
client.EndReceive, null).ContinueWith(t =>
{
state.MsStream.Write(state.Buffer, 0, t.Result);
return t;
});
if (task == state.BufferSize) await client.ReceiveAsync(state);
return task;
}
我的意思是,通過遞歸調用將對象轉移到對象外並將其存儲在對象中。
還是有更好的方法來使用相同的FromAsync
包裝?
如果這可行,那麼它可能更適合Code Review而不是SO。儘管可能需要添加更多細節(例如'StateObject'的定義可能會有所幫助)。 「等待」看起來很可疑。 –
我已更新帖子。關於'StateObject'沒什麼特別的。 'await await' [here](https://blogs.msdn.microsoft.com/pfxteam/2011/10/24/task-run-vs-task-factory-startnew/) –
同意,它可以更容易:刪除一個'等待'任務 .Factory.FromAsync'並從'ContinueWith''t.Result'返回' –