Pregunta

En su respuesta esteban explicó que cuando ConfigureAwait(false) se llama, el resto del método se ejecutará en un subproceso del grupo de subprocesos a menos que el Task estás awaitEl proceso ya está completo.

Lo que está claro:si uso ConfigureAwait(false) todo lo que se ejecute después de la llamada asincrónica se ejecutará en un subproceso del grupo de subprocesos y, por lo tanto, no se ejecutará en UI SynchronizationContext; de lo contrario (especialmente necesario para cosas basadas en UI como textBox1.Text = data.Property) se ejecuta dentro de UI SynchronizationContext.

Lo que no entiendo es:Hace await no significa que el Task estoy esperando es siempre ¿Completado antes de que se apliquen los métodos?Entonces, ¿cómo es posible que la tarea no se complete antes de continuar?

¿Fue útil?

Solución

Imagina algo como esto

var task = obj.SomeTaskAsync();
// do some lengthy computation
var value = await task.ConfigureAwait(false);

Creo que es fácil ver que la tarea podría completarse incluso antes de que await task llamar.

En este caso, el código después de await se ejecutará en el mismo contexto, incluso si ha utilizado .ConfigureAwait(false).

Otros consejos

Es importante comprender el orden de precedencia.En particular, el operador de punto (.) tiene mayor prioridad que await.Entonces, cuando lo hagas:

await SomeMethodAsync().ConfigureAwait(false);

Eso es idéntico a:

var task = SomeMethodAsync();
var awaitable = task.ConfigureAwait(false);
await awaitable;

Entonces el ConfigureAwait Se evalúa antes del await expresión, que en realidad hace la espera (asincrónica).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top