C# Task 多任务

s0611163 2019-09-19 02:43:54
场景:我有两批任务,一批任务是处理大量消息,当然要使用Task之类的,放主线程可就卡死了,还有一批任务,也可用Task,需要及时响应。现在问题来了,第一秕任务,大量调用Task.Factory.StartNew,执行完需要一段时间,另一批任务随后也调用了少量Task.Factory.StartNew,并且需要响应给前端,但这第二批任务本来是轻量级的,却阻塞了大量时间,导致前端看不到响应,比预期时间长了。怎么解决?
...全文
895 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的场景其实就是两个LimitedConcurrencyLevelTaskScheduler,长时间的,那允许同时执行的数量就设置的少些,比如2个,然后轻量级的,那就设置多些,比如100,或者轻量的就不传递LimitedConcurrencyLevelTaskScheduler进行控制,直接用默认的Scheduler
  • 打赏
  • 举报
回复
LimitedConcurrencyLevelTaskScheduler,使用不同的Scheduler来控制 你不要只看https://blog.csdn.net/starfd/article/details/79711915里一开始while部分的代码,也看下最后LimitedConcurrencyLevelTaskScheduler部分的代码
wanghui0380 2019-09-19
  • 打赏
  • 举报
回复
这个有很多选择 1.自己实现带限流优先级队列,任务本身可以先不task,先只是action,到调度了在task 2.对于长程任务,进入直接先Task.Yield(),或者每执行一个小阶段就暂时挂起,让其他任务先执行 3.C#7 对task有改进(记不清了,暂时没有使用7,印象里是ValueTask)
s0611163 2019-09-19
  • 打赏
  • 举报
回复
我自己实现了一个,大家看看有什么需要改进的地方?
https://www.cnblogs.com/s0611163/p/11549685.html
s0611163 2019-09-19
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
Task.Factory.StartNew(() => { }, TaskCreationOptions.xxxxxx)

直接看这个xxxxx都是啥意思

我试了下,只有使用TaskCreationOptions.LongRunning才可以实现我说的场景,但是会产生大量线程和句柄难以释放。
wanghui0380 2019-09-19
  • 打赏
  • 举报
回复
Task.Factory.StartNew(() => { }, TaskCreationOptions.xxxxxx) 直接看这个xxxxx都是啥意思

110,535

社区成员

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

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

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