等待的异步任务,不等待睡眠线程

时间:2018-10-31 19:11:16

标签: c# async-await

在下面的示例中,仅当我在 BREAKPOINT-1 上等待足够长的时间(5秒或更长时间)时,才会达到 BREAKPOINT-2 。否则,当Main退出时,程序将停止并且T1永远无法完成。 具有休眠线程的awaitasync Task是否正在等待正常行为?

public class Example
{
    private static Task T1()
    {
        return Task.Run(async () => 
        {
            // ManagedThreadId=N (N != 1)

            Thread.Sleep(5000);
            int x = 1; /*BREAKPOINT-2*/
        });
    }

    public static async void Example1()
    {
        await T1();
    }

    public static void Main()
    {
        // ManagedThreadId=1

        Example1();
    } /*BREAKPOINT-1*/
}

1 个答案:

答案 0 :(得分:0)

当您在Example1方法中执行void时,它会告诉您起火而忘记。

  

公共静态异步void Example1()

将其更改为任务;

  

公共静态异步任务示例1()

然后用

等待
  

Example1()。Wait();

或者如果异步方法正在等待