Estoy tratando de descubrir cómo funciona realmente el ExecutionContext en la versión 4.0 y posteriores de .NET Framework. La documentación dice que el principio administrado, la sincronización, la configuración regional y el contexto del usuario fluyen al nuevo hilo cuando se usa Thread.Start y la mayoría de las operaciones del grupo de subprocesos. Pero no puedo ver que esto funcione en la práctica.¿Cómo funciona .NET ExecutionContext en realidad?
Aquí es una simple aplicación de consola que pone a prueba si el contexto de sincronización y gestionado flujo principio al iniciar un nuevo hilo ...
static void Main(string[] args)
{
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("One"), null);
Thread t1 = new Thread(new ThreadStart(ThreadRun));
t1.Start();
t1.Join();
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("Two"), null);
AsyncFlowControl aFC = ExecutionContext.SuppressFlow();
Thread t2 = new Thread(new ThreadStart(ThreadRun));
t2.Start();
t2.Join();
aFC.Undo();
Console.Read();
}
static void ThreadRun()
{
Console.WriteLine("ThreadRun Id={0} Context={1} Principle={2}",
Thread.CurrentThread.ManagedThreadId,
(SynchronizationContext.Current != null),
Thread.CurrentPrincipal.Identity.Name);
}
El resultado es ...
ThreadRun Id=11 Context=False Principle=One
ThreadRun Id=12 Context=False Principle=Two
Así que la el contexto de sincronización nunca fluye y el principio administrado siempre fluye incluso cuando usted especifica que no debería fluir. Básicamente, la documentación es completamente incorrecta. Entonces, ¿hay una descripción de lo que ExecutionContext hace en realidad y por qué es útil?