Данные, которые я использую, поступают по UDP. Я хочу создать несколько соединений UDP, не блокируя основной поток. Я реализовал UDP-соединения синхронно и асинхронно, однако они оба держат основной поток заблокированным. Мой код никогда не достигает 'Console.WriteLine ("Past the Async") "
Цель состоит в том, чтобы UDP-соединения работали в фоновом режиме.
Может кто-нибудь дать какое-то указание относительно того, чтопопробуйте затем, или как правильно реализовать асинхронную версию UDP, которая позволяет основному потоку по-прежнему получать команды?
Я закомментирую ReceiveUdpData () для асинхронной версии.
class Program
{
// The whole point of this is to not block the main thread.
static async Task Main(string[] args)
{
ReceiveUdpData();
Console.WriteLine("Past Receive UDP Data");
await foreach (var item in MessagesAsync())
{
Console.WriteLine(item);
}
Console.WriteLine("Past The Async");
}
// Synchronous connection to UDP.
public static void ReceiveUdpData()
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
var count = 0;
using (UdpClient client = new UdpClient(12345))
{
while (true)
{
Byte[] receiveBytes = client.Receive(ref remoteEndPoint);
count++;
Console.WriteLine(count);
}
}
}
// Async UDP connection
private static async IAsyncEnumerable<object> MessagesAsync()
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
var count = 0;
using (UdpClient client = new UdpClient(12345))
{
while (true)
{
UdpReceiveResult test = await client.ReceiveAsync();
count++;
yield return test.ToString();
}
}
}
}