gpt4 book ai didi

c# - C#.net 4.5-异步任务和套接字

转载 作者:行者123 更新时间:2023-12-03 12:05:26 25 4
gpt4 key购买 nike

我发现.net的下一步。

刚开始时,我使用线程。在讨论了另一个问题(感谢ledbutter)之后,我现在正在使用任务。

所以我有 :

   private async void Tasks_Button_Click(object sender, RoutedEventArgs e)
{
Task myTask = doSomething();
await Task.WhenAll(myTask);
Console.WriteLine("....");
}
private async Task doSomething()
{
Console.WriteLine("Starting doSomething3");
await Task.Delay(3000);
Console.WriteLine("Finishing doSomething3");
}

现在在我的doSomething中,我想使用套接字来监听指定的端口。
在带有线程的版本中,我正在做:
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 5000);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receive...");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
sock.Close();

但是,如果将此代码放入doSomething方法中,则RreceiveForm会阻止ui线程和所有其他任务。

我能怎么做 ?

最佳答案

您的网络代码不会等待任何东西,因此不会异步运行。使用Socket类的异步操作,例如await sock.ReceiveFromAsync(...);,或将代码作为任务运行,例如await Task.Run(()=>{/*your code here*/});

关于c# - C#.net 4.5-异步任务和套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com