2015-07-17 1 views
6

Nega SynchronizationContext in un sito Web ASP.NET Core 1.0? Questo codice genera un'eccezione sul mio sistema:ASP.NET Core 1.0 SynchronizationContext

 app.Use(async (context, next) => 
     { 
      var sc = System.Threading.SynchronizationContext.Current; 
      if (sc == null) 
      { 
       throw new Exception("SynchronizationContext is null"); 
      } 
+0

possibile duplicato di [SynchronizationContext.Current è nullo quando viene eseguito su diversi domini app] (http://stackoverflow.com/questions/20521286/synchronizationcontext-current-is-null-when-run-on-different- domini app) – demonplus

+0

Non è un duplicato! – tugberk

risposta

12

è andato in ASP.NET 5 come non è necessario la sua funzionalità. Il suo scopo era quello di far scorrere HttpContext.Current che è andato.

Penso che stia facendo anche qualcosa con la cultura attuale ma non sono sicuro di come sia gestito ora.

+1

Per rendere la cultura corrente "async-friendly", ci sono in realtà 2 strategie: su CoreCLR e .NET 4.6, viene utilizzato uno speciale flag "Switch.System.Globalization.NoAsyncCurrentCulture': è stato precedentemente impostato su false da' Bootstrapper di dnx 'ma ora è gestito direttamente in mscorlib: https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.cs. Su .NET <4.5.2, viene invece utilizzato uno speciale 'HostExecutionContextMan': https://github.com/aspnet/dnx/blob/dev/src/dnx.clr.managed/DnxHostExecutionContextManager.cs – Pinpoint

+0

Sarebbe davvero bello per far scorrere la cultura anche attraverso un accessor (proprio come HttpContext). – tugberk

+0

Ero sotto l'ipotesi errata ASP.NET 5 ha un'esecuzione a thread singolo simile al nodo. Quindi, questo significa che i contesti possono essere gestiti da thread separati e un'attesa può portarti ad un altro thread? –