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示例的异步示例可以轻松移植到异步等待。更好的是,我确定有一个异步等待特定样本。 –
你会认为会有一个例子,但到目前为止,我找不到一个。 –