Я должен знать ли Управление. BeginInvoke и Управление. Вызовите вызовы, выполнится в порядке, которым их называют.
У меня есть следующий сценарий:
Порядок выполнения шага 1-4, как гарантируют, будет в показанном порядке (технически, порядок, как гарантируют, не будет тем путем, но вопрос, который я имею, является только актуальным, если порядок как показано).
Вопрос, который я имею, состоит в том, существует ли шанс, что вызов Invoke/BeginInvoke на шаге 3 выполняется перед вызовом BeginInvoke на шаге 2?
Кроме того, не комментируйте блокирование потока UI.
В вашем случае шаг 2 всегда будет выполняться перед шагом 3. BeginInvoke в потоке пользовательского интерфейса будет выполняться в том порядке, в котором он был поставлен в очередь.
Поток пользовательского интерфейса фактически является насосом сообщений , у него одна очередь сообщений, и только один поток ее использует, поэтому гарантируется, что рабочие элементы будут выполняться в том порядке, в котором они были поставлены в очередь.
Это с помощью Delegate.BeginInvoke, что порядок выполнения может быть непоследовательным.
114987]
Вызовы BeginInvoke помещаются в очередь в целевом потоке (поскольку они публикуются в порядке поступления).
Синхронные вызовы в потоке WCF (шаг 3) могут выполняться до асинхронных вызовов (шаг 2) сделано из этой темы.
Вы не можете предположить это, но если между двумя приведенными выше вызовами существует какая-то форма зависимости, они будут ждать семафор и выполнять зависимый код только тогда, когда они оба завершены.
Если причина, по которой вы выполняете два вызова одновременно, не связана с производительностью, я бы, вероятно, просто выполнил второй вызов в обратном вызове первого (что значительно упрощает отладку).
Недостаточно информации, чтобы дать вам хороший ответ. Поток пользовательского интерфейса заблокирован, поэтому шаги 2 и 3 должны выполняться в другом потоке. Если между ними нет синхронизации, то откуда мы можем знать какой-либо порядок?
Thread 1 Thread 2 Thread 3 Thread 4
Block UI Calls BeginInvoke
Unblock UI Calls Invoke or BeginInvoke BeginInvoke runs BeginInvoke runs
У вас много параллелизма, но из того, что вы описали, мы не можем сказать вам, какие возможные порядки будут произойти, если не сказать: «Что угодно». Мы даже не можем сказать вам, что вызовы BeginInvoke не произойдут до того, как поток пользовательского интерфейса будет заблокирован или после того, как поток пользовательского интерфейса будет разблокирован.