Какие сценарии составляют контекст выполнения не по умолчанию в .Net? - PullRequest
1 голос
/ 22 июня 2010

WaitHandle.WaitOne () имеет параметр ExitContext, позволяющий временно снять блокировку ресурса перед удержанием другой. Это полезно в некоторых случаях, когда может произойти тупик или голодание потока.

В документе msdn говорится о контексте по умолчанию. Они относятся только к примерам, которые представляют собой находящийся в не по умолчанию контекст, включающий ContexBoundObject (см. * Related Qusetion ).

Являются ли другие параметры синхронизации, такие как Monitor.Enter (), операторы Lock {}, также контекстом по умолчанию? Какие другие сценарии поместили бы выполнение потока в контекст по умолчанию?

1 Ответ

1 голос
/ 22 июня 2010

Это сложная тема, и я не знаю достаточно об этом. Что я знаю, так это то, что это важно в сценариях удаленного взаимодействия. Передав True, вы можете избежать блокировки связи до тех пор, пока не будет разрешено ожидание, и разрешить отправку других сообщений. Да, позволяет избежать взаимоблокировок, но может вызвать проблемы с синхронизацией.

Этот аргумент WaitOne () вызвал столько путаницы и FUD, что в .NET 2.0 SP1 произошли изменения, нарушающие совместимость. Они добавили перегрузки WaitOne (int) и WaitOne (TimeSpan), чтобы избежать угадывания правильного значения аргумента exitContext. Который обычно должен быть Ложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...