[英]InvokeAsync order reliability
我有一个关于invokeAsync的问题,是否可以将校准顺序视为可靠还是不可靠。
例:
//Get Dispatcher of UI Thread
private Dispatcher _dsp = Dispatcher.CurrentDispatcher;
//Method called from non-UI Thread
private void a() {
//Do Stuff
b();
_dsp.InvokeAsync(() => {
//Do Stuff in UI Thread
});
}
private void b() {
//Do stuff
_dsp.InvokeAsync(() => {
//Do stuff in UI Thread
});
}
我可以认为b的InvokeAsync中的代码先在UI线程的分派器中运行是因为b的InvokeAsync是在UI线程的调度程序中首先运行,或者这是大多数情况下b的第一个都将首先运行但在奇怪的情况下运行的情况吗?可能是相反的,或者甚至更糟的是在两者之间跳?
基本上,我可以在某个时候遇到这2次调用吗?还是可以,但是可以肯定地遵循我提到的执行顺序吗? 如果有问题的机会,如何使它变得更好有什么想法?
我不认为您可以对任何异步操作的运行顺序做出任何假设。 但是,如果需要它们按顺序运行,则可以使用Task
类执行以下操作:
Task.Factory.StartNew(() => DoSomethingWith(filePath)).ContinueWith((
Task resultFromPrevious) => DoSomethingElseWith(resultFromPrevious),
TaskScheduler.FromCurrentSynchronizationContext())
在这种情况下, TaskScheduler.FromCurrentSynchronizationContext()
选项将使DoSomethingElseWith
方法在UI线程上运行。
您可能需要查看MSDN上的Task.ContinueWith方法页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.