Quando ci occupiamo di alcuni punti di estensibilità nell'API Web ASP.NET, ci occupiamo anche di TAP (Pattern di programmazione basata sulle attività). In alcuni punti, vogliamo fornire una continuazione a un metodo asincrono con ContinueWith
e facciamo alcune cose all'interno del delegato che passiamo su ContinueWith
.Punti di estensibilità dell'API SynchronizationContext e Web ASP.NET
Come spiega Brad Wilson here in profondità che il SynchronizationContext è di vitale importanza quando forniamo continuazioni. Per me, l'unico posto in cui ho bisogno di tornare al SynchronizationContext
in API Web ASP.NET è il luogo in cui ho bisogno di giocare con HttpContext.Current
(che è qualcosa che non avrei mai fatto in un'applicazione API Web ASP.NET) e il luogo in cui ho bisogno di impostare alcune informazioni per thread based come Thread.CurrentPrincipal
.
Quindi la domanda è: vogliamo mai tornare allo SynchronizationContext
quando forniamo continuazioni in alcuni punti di estensibilità come gestori di messaggi, filtri, formattatori, ecc.?
Grazie per la risposta! Penso che tu abbia mescolato la domanda con ASP.NET MVC. Supponiamo che tu non sia in Host ASP.NET. Quindi, non avrai HttpContext. Quindi, i punti di estensibilità non sono strettamente associati a quelli. – tugberk
@tugberk La risposta è sempre la stessa, davvero; se hai qualcosa legato a un particolare contesto e poi vuoi andare asincrono, vuoi veramente assicurarti di copiare i valori fuori dal contesto (o assicurarti di poter accedere di nuovo * al * contesto) che tu Avrò bisogno di elaborazione. – casperOne
il problema è che: in Web API, non hai praticamente alcun contesto. È possibile il contesto all'interno delle variabili che vengono trasportate attraverso il thread + l'infrastruttura di framework torna sempre al contesto di sincronizzazione se si guarda il codice sorgente. Ecco perché la tua risposta non è applicabile. – tugberk