WindowsFormsSynchronizationContext долго блокирует пост - PullRequest
0 голосов
/ 19 сентября 2011

Я смотрел на задержку / блокировку асинхронной отправки в WindowsFormsSynchronizationContext и обнаружил, что здесь используется метод Control.MarshaledInvoke , который имеет две блокировки внутри! Так как SynchronizationContext использует глобальный элемент управления ( Application.MarshalingControl ), который эффективно поражает одну блокировку и, таким образом, ограничение пропускной способности при использовании этого.

Что-то, что мы видели несколько раз, может привести к очень длительным задержкам, например, при подключении к машине через удаленный рабочий стол кажется, что элементы управления заблокированы на долгое время.

Мой вопрос: кто-нибудь сталкивался с этой проблемой? И какие-либо предложения для решения?

Я планирую поместить фактическое сообщение в пул потоков с помощью Task.Run ... но это приведет к дополнительным издержкам. Наша главная проблема заключается в том, что публикация потока асинхронно не должна быть заблокирована в течение длительного времени> 1 мс, поэтому я полагаю, что выполнение действия для задачи будет работать, но это также создает давление GC.

...