猿问

C# 多线程任务并行运行问题

有四个任务 任务1:登陆验证 任务2:验证成功后从Web服务获取数据 任务3:验证成功后从数据库获取数据 任务4:使用2、3的数据执行一个方法 

在解决上述问题中,最早的方法是使用顺序执行1、2、3、4,现在对此做了优化,由于2、3两个任务之间是没有关联的,可以放到不同线程内执行,但是4的执行需要2、3同时完成作为条件,因此,在1执行后,创建两个全局标志位M2,M3,开启三个线程分别执行2、3、4,其中2、3执行完毕后会分别把M2、M3置为true,4的线程一直循环监听M2、M3,当两者都为true时开始执行4的任务。

现在想把这个方法做进一步优化,不希望4一直在询问2、3是否完成了,而是2、3完成了自己通知4。这里想到了使用异步委托BeginInvoke,创建一个4的回调函数,但难点是需要两个任务都执行完毕后才执行这个回调函数。

很自然地,我想到了再一次使用全局变量M2,M3。不过总觉得这种方式不太优雅?是否有更好的解决方案呢?

另外,想请教下这种类型的问题该归纳为那种问题,不太像并发问题吧?


一只甜甜圈
浏览 715回答 2
2回答

天涯尽头无女友

1 、Thread Join2、Event Wait

SMILET

亲,有好几个办法可以解决你的问题,涉及到线程同步的你可以去MSDN下面看一下Thread下面的方法,或是System.Threading命名空间下的类,就可以轻松解决你的问题.
随时随地看视频慕课网APP
我要回答