2013-08-13 9 views
6

Uno degli aspetti positivi di C# 5.0 è rappresentato dalle parole chiave async/await e da come semplifica l'impianto idraulico utilizzato per scrivere con Task Parallel Library (TPL).C'è un modo per forzare asincrona/attendere di continuare sul primo thread disponibile?

La mia domanda è se si dispone di codice thread-agnostico e si verifica l'attivazione di un'operazione asincrona nel thread principale (leggi: thread UI), ma non è necessario che la continuazione avvenga sul thread principale, quindi dici al paradigma async/await che vuoi che continui sul primo thread disponibile, anche se non è il thread principale?

Penso che riuscire a fare ciò aumenterebbe di molto l'efficienza di alcuni scenari, ma non una pallottola d'argento.

+2

Si noti che avere questa capacità è molto importante per il corretto funzionamento in alcuni casi, non solo per l'efficienza. È possibile evitare di causare deadlock assicurando che determinate continuazioni non siano in esecuzione nel contesto catturato. – Servy

risposta

15

Se non si cura, dove il resto del metodo continua, utilizzare Task.ConfigureAwait:

await foo.DoSomethingAsync().ConfigureAwait(continueOnCapturedContext: false); 

(Non fare hanno di utilizzare un argomento di nome qui, ma aumenta la chiarezza.)

Vedere la parte "Configura contesto" di Stephen Cleary's "best practices" article per ulteriori dettagli.

+0

Ahi, ma in senso buono. :) Voglio dire: ho scritto quell'articolo, ma è lusinghiero che tu lo consideri di qualità Toub. –

+0

@StephenCleary: Whoops, mi dispiace. Stavo cercando "Best practice di Stephen Toub ConfigureAwait" e ho scoperto che - quindi non ho controllato la paternità. Scuse profonde! (Sono sicuro di aver visto un altro articolo * davvero * di Toub su di esso ...) –

Problemi correlati