需要在C#中优先化异步套接字读取

Jac*_*cko 6 c# sockets asynchronous ui-thread thread-priority

我的应用程序使用异步HttpWebRequest请求预取大量视频帧.因此,如果有100帧,预取器将异步请求所有100帧,一次全部请求,并在收到时进行处理.即它同时进行100次异步调用.这可能会使网卡饱和,但没关系.我想最大化网络带宽.

但是,当发生此预取时,用户可能想要查看其中一个帧.因此,假设他们想要查看第56帧.问题是,帧1 - 100已经被请求,并且在管道中,因此对帧56的请求可能需要很长时间才能得到响应.

如果有一些方法可以在完成asynch请求之后重新确定它们的优先级,那会更好.并将用户请求推送到队列的前面.

如果我不能这样做,我想我必须批量请求帧,以便我可以在批次之间插入我的用户请求,并避免超时.

关于如何正确设计这一点的任何想法都将非常感激.

小智 0

啊,我会使用优先级队列或堆来处理帧的“数据包”。由于您不想要超时并且还想要速度,因此创建帧数据包(大小为 2 的幂)并将它们与优先级关联(也许 0 表示未请求,1 表示用户请求?)。这样,最高优先级的数据包(用户请求的)将始终位于队列的前面或堆的顶部。