假设我有两个事件A和B.每个事件都会引发一个异步调用,比如AsyncA和AsyncB。
我想要的是:当A只在AsyncB完成时调用AsyncA时。
事件A和B按顺序触发:A,然后B. 我希望AsyncA在AsyncB完成之前完成,但实际上,大部分时间,AsyncB都是在AsyncA之前完成的。
我无法在AsyncA完成事件中调用AsyncB。 如何确保AsyncB始终在AsyncA之后?
答案 0 :(得分:0)
如果顺序很重要,则异步方法调用不合适。
答案 1 :(得分:0)
只要两个调用都是异步运行,控制它们的顺序就超出了你的能力范围。这是由调度程序完成的。
但你可以使用TPL使它们同步运行:
System.Threading.Tasks.Task.Factory.StartNew( ( ) => OnAsyncA() )
.ContinueWith( ( t ) => OnAsyncB() );
答案 2 :(得分:0)
您不能保证异步调用的完成顺序,但您可以按照所需的顺序执行要执行的工作。您需要的是一种同步方式。
在OnAsyncA
中你需要:
OnAsyncB
。在OnAsyncB
,
在线程池线程中,
OnAsyncB
完成的工作。此处还有其他变体,例如使用TPL等从“依赖事件”队列中出发的较长运行线程,等等。
请记住从线程池线程同步回UI线程。