用NetworkStream.DataAvailable 做判断条件
有问题先看文档
https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.networkstream.read?view=net-5.0#System_Net_Sockets_NetworkStream_Read_System_Byte___System_Int32_System_Int32_ 本帖最后由 Damenly 于 2021-7-15 16:30 编辑
buffer是在内存里的,几十个客户端也不会吃内存,所以应该不是磁盘的问题。 固定下每个client发的数据大小看看?非csharp程序员,还有如果真如楼上所说这个read是blocking有一定timeout了,我都怀疑是不是这个read 是不是busy waiting,文档一句没写
前面没注意到你就是要block
你用的是Task.Run(),它不一定会开新线程,很有可能你好几个客户端连接的task是在同一个线程里处理的。
一个task在Read这里block了,是否会马上切换到下一个task,我不清楚 hourousha 发表于 2021-7-15 23:30
没记错的话.net core里l的异步tcp在linux中是用epoll实现的,其他怎么实现不清楚。也许实现的有问题,还是 ...
我觉得Task有问题的可能性还是比较大啊
这个Task内部的方法是阻塞的,而且执行时间很长
Task的背后是线程池,同时执行的数量是有上限的,系统自动控制
这里应该设置成Long running,具体有什么用我倒是忘了
其实这边我建议用Thread手动控制线程,既然想要一一对应
Task内部有很多东西是看不出来的
— from Xiaomi MIX 2S, Android 10 of S1 Next Goose v2.4.4.1 感觉是到线程池数量上限了,前面的task都block住了,线程让不出来,新的task都queue住了
https://www.cloudsavvyit.com/p/uploads/2020/08/60467b28.png 长运行为什么不用 线程 wait awake 的机制? hourousha 发表于 2021-7-16 14:33
线程池耗尽的问题,可以某种意义上用LongRunning的TaskCreateOption来解决。
但这本身并不是解决这个(多 ...
我只是说Task的问题
他这么写和网络没关系,只要是有大量Task就会遇到
— from Xiaomi MIX 2S, Android 10 of S1 Next Goose v2.4.4.1 为啥不异步呢 IO不异步,天理难容…
页:
[1]