C# 在 UdpClient 接收上使用 async/await

Fin*_*Fon 3 c# asynchronous udpclient async-await

以下代码使用 Task 异步接收并在控制台中显示接收到的结果:

private void ReceiveMessage()
{
    Task.Run(async() => 
    {
         using(var udpClient = new UdpClient(15000))
         {
             while(true)
             {
                 var receivedResult = await udpClient.ReceiveAsync();
                 Console.Write(Encoding.ASCII.GetString(receivedResult.Buffer));
             }
         }
    });
}
Run Code Online (Sandbox Code Playgroud)

我想学习如何使用 async/await 函数,所以我想知道如何使用 async/await 使函数 ReceiveMessage() 异步?

Ren*_*ogt 6

如果您希望整个方法都可以等待,只需将其更改为:

private async Task ReceiveMessage()
{
     using(var udpClient = new UdpClient(15000))
     {
         while(true)
         {
             var receivedResult = await udpClient.ReceiveAsync();
             Console.Write(Encoding.ASCII.GetString(receivedResult.Buffer));
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

你不再需要Task.Run()了,这将使用一个线程。不需要那个线程。该方法现在在awaiting 时返回给调用者ReceiveAsync()
ReceiveAsync()完成,方法是(最终)在恢复Console.WriteLine()