C# 延迟执行

wushang923 2012-06-29 11:54:23
好比这张图,很多条数据按时间顺序过来(每分钟上千条),分别对他们进行处理。但是B出现的时间要晚于A,所以在A处理完成后B还没有处理完成,并且因为查找条件的限制,无法用B去查找到A,需要在A处理完成后等待2秒才能执行对象的创建。

我想知道的是如何在不影响主程序(过程1)的情况下去延迟每一次创建的执行(过程2)。
本来想使用全局的定时器,不过每一个过程1的时间不是固定的,所以后来创建了很多一次性的定时器,在处理A以后执行。
但是觉得不妥。

现在是使用多线程,在每一个A处理完成后生成一个线程,然后延迟2秒执行,但还是觉得不妥。我对线程不是很了解,怕这样会占用很多资源,而且也怕他们之间会相互有影响,或是丢数据什么的......

请问还有什么更好的方法没?

...全文
783 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TobeNotTobe 2012-07-02
  • 打赏
  • 举报
回复
如果只是两个任务,那可以写个两个线程(A,B)函数(while条件,你懂的),在主程序中定义两个线程的状态A-执行,B-不执行。A执行完,A改变B的执行状态,A退出,B执行,退出。复杂点的话,B执行完后再restart A,循环往复。
silence1214 2012-07-02
  • 打赏
  • 举报
回复
有个方法:
1:处理完A之后放入到库中,或者别的地方先保存起来。
2:处理完是B的话,就从库中读取到对应的A来生成A+B
iyomumx 2012-07-01
  • 打赏
  • 举报
回复
如果是.Net 4.0,使用 System.Collections.Concurrent.ConcurrentQueue<T>和 System.Collections.Concurrent.BlockingCollection<T>配合,不需要线程同步对象也能完成。
如果不是,用两个队列来储存处理好的A和B,然后用两个Semaphore对象进行同步。
wushang923 2012-07-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

处理完A,不进入过程2,接着处理B,完了,再进入过程2,不知道能不能满足楼主思路。
[/Quote]
嗯,思路是很好的。
可是没办法用B去找到对应的A的,而且这个过程一直在发生,也就是说一个B1完成后,可能已经出现A1,A2,A3.....,那么是不是还要再去分别遍历这些A呢。
wushang923 2012-07-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

别管啥A啊,B啊

直接在你最后一步去搞。 最后一步直接用栈。栈A,栈B

只要栈B不为空,就把栈A和栈B同时弹出一个,合并出来

另外一个方法是使用Iquerable 构建语法树,语法树并不执行,只是构建那么解释执行则延迟到最后一步去搞
[/Quote]

所以是要一直监视着栈A和栈B的状态吗?这个过程是一直在进行的,信息量很大,一直去判断话会不会太消耗资源了?
cheng2005 2012-06-29
  • 打赏
  • 举报
回复
压入堆栈,弄另外一个线程负责把,栈顶的AB组合
Lugyedo 2012-06-29
  • 打赏
  • 举报
回复
Thread.Sleep
wushang923 2012-06-29
  • 打赏
  • 举报
回复
wanghui0380 2012-06-29
  • 打赏
  • 举报
回复
别管啥A啊,B啊

直接在你最后一步去搞。 最后一步直接用栈。栈A,栈B

只要栈B不为空,就把栈A和栈B同时弹出一个,合并出来

另外一个方法是使用Iquerable 构建语法树,语法树并不执行,只是构建那么解释执行则延迟到最后一步去搞
阿冷 2012-06-29
  • 打赏
  • 举报
回复
处理完A,不进入过程2,接着处理B,完了,再进入过程2,不知道能不能满足楼主思路。

110,539

社区成员

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

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

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