[c#] 대 Task.Wait - 교착 상태를 기다리고 있습니까?


Answers

Question

나는 Task.Wait 의 차이를 이해하지 못한다. Task.Wait .

ASP.NET WebAPI 서비스에서 다음과 유사한 기능을 제공합니다.

public class TestController : ApiController
{
    public static async Task<string> Foo()
    {
        await Task.Delay(1).ConfigureAwait(false);
        return "";
    }

    public async static Task<string> Bar()
    {
        return await Foo();
    }

    public async static Task<string> Ros()
    {
        return await Bar();
    }

    // GET api/test
    public IEnumerable<string> Get()
    {
        Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());

        return new string[] { "value1", "value2" }; // This will never execute
    }
}

Get 은 교착 상태가됩니다.

무엇이 이것을 일으킬 수 있습니까? 왜 내가 await Task.Delay 기다리는 대신 Blocking Wait을 사용할 때 이것이 문제가되지 await Task.Delay ?




Links