espera vs Tarea. Espera – ¿Interlocking?

No entiendo muy bien la diferencia entre Task.Wait y Task.Wait .

Tengo algo similar a las siguientes funciones en un servicio ASP.NET WebAPI:

 public class TestController : ApiController { public static async Task Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task Bar() { return await Foo(); } public async static Task Ros() { return await Bar(); } // GET api/test public IEnumerable Get() { Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray()); return new string[] { "value1", "value2" }; // This will never execute } } 

Donde Get un punto muerto.

Que podria causar esto? ¿Por qué esto no causa un problema cuando uso un locking de espera en lugar de await Task.Delay ?

Wait y await , aunque conceptualmente similar, en realidad son completamente diferentes.

Wait bloqueará sincrónicamente hasta que la tarea finalice. Entonces el hilo actual está literalmente bloqueado esperando a que la tarea se complete. Como regla general, debe usar ” async hasta el final”; es decir, no bloquee el código async . En mi blog, voy a los detalles de cómo el locking en el código asíncrono causa un punto muerto .

await esperará asíncronamente hasta que la tarea se complete. Esto significa que el método actual está “en pausa” (se captura su estado) y el método devuelve una tarea incompleta a su interlocutor. Más tarde, cuando finalice la expresión de await , el rest del método se progtwigrá como una continuación.

También mencionó un “bloque cooperativo”, por el cual supongo que quiere decir que una tarea en la que está Esperando puede ejecutarse en el hilo de espera. Hay situaciones en las que esto puede suceder, pero es una optimización. Hay muchas situaciones en las que no puede suceder, como si la tarea es para otro progtwigdor, o si ya se inició o si es una tarea que no es de código (como en el ejemplo de código: Wait no puede ejecutar la tarea Delay línea porque hay sin código para ello).

Puede encontrar útil mi introducción async / await .