以下代码使用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()
恢复。