Task中建一个Queue 出了sleep等方法。如何等待队列中填充任务并且执行后返回?

boyyao 2021-05-02 10:00:50
假设我有有个要求延迟极低的数据要处理。比如var r = MD5(str) 需要用最快的方式得到MD5的结果。

按照低级的方法。我在Task中用如下方式来实现。

while (true)
{
if (!string.IsNullOrWhiteSpace(str))
{
strr= MD5(str)
str= null;
}
Thread.Sleep(1);
}
但是首先这个方法感觉很不美观。并且查询得知。sleep在系统上的最低精度是15ms。并且返回的数据也相对麻烦。要么做事件。要么也要类似while去等待读取。。

想用Queue 尝试实现类似功能。。不知道Queue能否相对美观,快速的等待数据被填充。并且方便快速的返回处理后的数据?
或者请教有没有其他比较合适的方法?


...全文
774 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2021-05-06
  • 打赏
  • 举报
回复
这样把,上面说了可以利用驱动和外置硬件 主要是驱动通过各种中断运行,不抢调度。通过南桥dma方式读写内存,不抢io。 外置硬件独立芯片不抢cpu 所以呢,你非要如此可以用opencl这类gpu计算库,让显卡去算。毕竟一般服务器显卡就是摆设,任务不重。我们可以利用利用(外置计算棒也行),毕竟你连15ms都要纠结,那我们直接建议用外设和中断,绕过系统调度了
  • 打赏
  • 举报
回复
一直跑也不是说他就快啊,又不是即时操作系统
删库到跑路 2021-05-06
  • 打赏
  • 举报
回复
引用 10 楼 大葡萄八块一斤 的回复:
一直跑也不是说他就快啊,又不是即时操作系统
你的大西瓜不见了?
ziqi0716 2021-05-06
  • 打赏
  • 举报
回复
你倒不如先单线程同步的先实现了你的基本功能,再考虑下哪里能优化,能改成异步,能改成多线程等等。 死循环这种代码,有坏味道在里面。
Eason0807 2021-05-04
  • 打赏
  • 举报
回复
另外你可以使用Task.ContinueWith(t=>{}) MD5的Task完成后执行运行下一个需要MD5的任务,这应该时最快的方式了 但是运行MD5的Task是不是立即执行也不能控制,你只能提高他的优先级
Eason0807 2021-05-04
  • 打赏
  • 举报
回复
你还不如自己启动一个后台线程做了,对于需要长期持有的线程来说不适合Task
橘子皮... 2021-05-04
  • 打赏
  • 举报
回复
应该在MD5后直接挂任务不是么
xuzuning 2021-05-02
  • 打赏
  • 举报
回复
你的意思是 Task 中有一个循环在等待外部数据的改变?这显然是错误的
boyyao 2021-05-02
  • 打赏
  • 举报
回复
这里的sleep是为了等待str变量的变化。。str变量变化了才去做下一步动作。 意思是。一个Task需要一直在执行。然后其他task有计算md5需求时。让这个Task来完成。。
xuzuning 2021-05-02
  • 打赏
  • 举报
回复
为什么是 sleep? 既然在追求高速度,那要 sleep 做什么?
wanghui0380 2021-05-02
  • 打赏
  • 举报
回复
所以我建议你停止这种无意义的折腾。 前后几个帖子2月都过去了,没有意义。 该说的我们都说了,只最后劝一句。window不是单任务系统,他就只能在“就绪线程”里轮着执行,这是你逃不开的,你要不承认这个,非要搞所谓0等待线程,注定是个徒劳工作 非要如此我觉着你可以放弃c#,你可以使用C++和wdk做个驱动,why,因为驱动程序走内核,走中断。 驱动程序在可以做到你所谓的0等待,并且可以把计算外置
boyyao 2021-05-02
  • 打赏
  • 举报
回复
我知道这种做法不对。。但是我不知道有什么其他方法可以代替这种方式呢? 首先task不能少。例子看上去可以省去这个task。但是实际上task不能少。。这个task的作用就是快速的吧md5结果返回给调用者。
notepad--v3.4 windows Notepad--v3.4.0-plugin-Installer.exe 是win10下面的插件版安装包,会关联右键菜单等。 Notepad--v3.4.0-win10-portable.zip 是绿色免安装版本,解压即用,不会关联右键菜单注册表。 Ndd-quick-v3.3.0-win10-single-portable.zip 是单文件绿色免安装版,只包含皮肤和vc依赖库,不含插件、不含文件对比,主推轻量级、快速反应。适合只需要纯粹、轻快级,文本编辑器的用户。不定期发布。 MacOS 版本 Notepad--v3.4.0-mac_x64_12.3.dmg 是macos 12.x 及以后的版本。 Notepad--v3.4.0-mac_arm64_12.3.dmg 是macos 12.x 及以后 arm64 m1/m2芯片 的版本。第一次安装时,需要在设置偏好里面,放开苹果的安装限制,才能正常识别,请自行放开设置一下。 如果还是有问题,参考帖子:#I8JTJN:macOS Sonoma 14.1.1安装提示已损坏:macOS Sonoma 14.1.1安装提示已损坏 uos com.hmja.notepad_3.4.0.0_amd64.deb 是x64 cpu架构的uos系统对应的ndd版本。 其余系统版本后续会发布。 3.4 修改如下: 1 支持文件标签拖入拖到新窗口的效果。 2 windows下修改快捷键放开。 3 按行号切分大文件。 4 大文件打开时,在文件夹查找所在目录,macos下可能会崩溃问题。 5 目录右键增加删除文件、文件夹功能。 6 补充深色主题下rust语法高亮; lisp 语法失效问题。 7 linux下信号打开文件,不拿锁,打开文件在消息队列去做。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧