2

Собственно, вопрос.

Используются ли данные штуки в современном C#?

Как я понимаю, они нужны для того, что бы заставить работать с объектом в однопоточной манере, незаморачиваясь с lock'ми.

Я прочитал некоторые статьи, где писалось, что этих вещей лучше избегать, так как класс становится ограниченным и какой-нибудь стандартный lock профитнее. Так ли это или в каких сценариях это может пригодится?

На сколько я знаю, то только UI поток "из коробки" имеет свой SynchronuzationContext ?

iluxa1810
  • 24,899
  • 1
    «Я прочитал некоторые статьи, где писалось, что этих вещей лучше избегать, так как класс становится ограниченным и какой-нибудь стандартный lock профитнее.» — не читайте больше этих авторов. Спросите у них при случае, пробовали ли они написать многопоточный layout manager и почему, по их мнению, WPF однопоточный. – VladD Feb 08 '18 at 09:57

2 Answers2

3

В современном C# они широко используются "за кулисами".

Например, в WinForms можно использовать SynchronizationContext.Send и SynchronizationContext.Post, а можно их эквиваленты Control.Invoke и Control.BeginInvoke.

В TAP часто используется TaskScheduler.FromCurrentSynchronizationContext() при необходимости работать с GUI. То есть захватывается контекст и сообщения отправляются в него. Это проще и удобнее.

  • Еще такой вопрос: Есть такое понятие, как контекст потока. Я правильно понимаю, что оно устанавливается самой CLR по какой-то логике и на прямую с ним никто не работает? Как я на основании Synchronization атрибут. – iluxa1810 Feb 08 '18 at 09:33
  • @iluxa1810: Его устанавливает WPF. Ну и можно использовать самостоятельно, если необходимо, например, как QueueSynchronizationContext вот тут. – VladD Feb 08 '18 at 09:55
0

ContextBoundObject используется в технологии NET.Remoting. Он есть "в коробке"

  • .NET Remoting сам по себе давным-давно устарел. Так что вопрос остаётся в силе. – Alexander Petrov Feb 08 '18 at 01:49
  • Remoting хоть и устарел, но он есть "в коробке" Подключаешь пространство имен using System.Runtime.Remoting.Contexts; и пользуешся.. – Василий М Feb 09 '18 at 03:53