2016-12-20 2 views
2

Ich bekam HttpContext.Current als null innerhalb der Methode, die innerhalb einer Task Factory aufgerufen wird. Also habe ich die Variable HttpContext.Current der Variable currentContext zugewiesen. Dann habe ich die gleiche Variable verwendet, um HttpContext.Current zuzuweisen.Ist es richtig, HttpContext.Current innerhalb einer Task Factory zuzuweisen?

var currentContext = HttpContext.Current; 
    Task shipmentCreationCompleted = Task.Factory.StartNew(() => 
    { 
     HttpContext.Current = currentContext; 
     MethodToPerformSomeAction(); 
    }); 

Es funktioniert jetzt ohne Probleme. Bitte lassen Sie mich wissen, wenn mein Code technisch ein Problem hat. Oder gibt es alternative Möglichkeiten, dieses Problem zu lösen?

+2

Übergeben Sie HttpContext an die Task Factory als Parameter, dann verwenden Sie immer den gleichen HttpContext wie die aufrufende Methode – alikuli

+0

Danke alikuli. Welchen Unterschied macht es, wenn ich das benutze? –

+1

Sie verwenden genau die gleiche Referenz der Anfrage, die die aufrufende Aufgabe verwendet. Keine Inkompatibilität. Im Grunde ist das Parameter Injection. Da Ihre Methode funktioniert, möglicherweise diese Methode ist auch gut, aber so viele Dinge passieren in Multi-User-Umgebungen, die ich fühle mich sicherer, übergeben Sie die Referenz des HttpContext und verwenden Sie es. Auf diese Weise kenne ich immer das Tier, mit dem ich es zu tun habe. – alikuli

Antwort

1

Schließlich habe ich diese wie auf dem Kommentar basiert,

Task shipmentCreationCompleted = Task.Factory.StartNew(currentContext => 
    { 
     HttpContext.Current = (HttpContext)currentContext; 
     MethodToPerformSomeAction(); 
    }, HttpContext.Current); 

Es funktioniert super!

Verwandte Themen