0
我正在編寫套接字服務器並嘗試利用新的async/await
功能。異步/等待套接字服務器OutOfMemoryException
我根據我的代碼關閉this stackoverflow answer
我得到
類型 'System.OutOfMemoryException的' 未處理的異常在mscorlib.dll
發生 有什麼明顯任何人都可以在下面的代碼中看到?
public void Main()
{
CancellationTokenSource cts = new CancellationTokenSource();
TcpListener listener = new TcpListener(IPAddress.Any, 6666);
listener.Start();
while (true)
{
AcceptClientsAsync(listener, cts.Token);
}
cts.Cancel();
listener.Stop();
}
async Task AcceptClientsAsync(TcpListener listener, CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
TcpClient client = await listener.AcceptTcpClientAsync();
Console.WriteLine("Client. Doing the do.");
SomeTaskAsync(client, ct);
}
}
async Task SomeTaskAsync(TcpClient client, CancellationToken ct)
{
var stream = client.GetStream();
while (!ct.IsCancellationRequested)
{
// Do Stuff
stream.Close();
client.Close();
}
}
感謝您的回答。我應該在我的情況下使用異步等待模式嗎?目標是簡化代碼。 –
是的,異步等待仍然很棒。來自MSDN示例的異步示例可以輕鬆移植到異步等待。更好的是,我確定有一個異步等待特定樣本。 –
你會認爲會有一個例子,但到目前爲止,我找不到一個。 –