以下代码使用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));
             }
         }
    });
}


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

最佳答案

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

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


您不再需要使用线程的Task.Run()。不需要该线程。现在,在await调用ReceiveAsync()时,该方法返回到调用方。
ReceiveAsync()完成后,该方法(最终)将从Console.WriteLine()恢复。

08-27 09:19