在下面的示例中,仅当我在 BREAKPOINT-1 上等待足够长的时间(5秒或更长时间)时,才会达到 BREAKPOINT-2 。否则,当Main
退出时,程序将停止并且T1
永远无法完成。 具有休眠线程的await
版async
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*/
}
答案 0 :(得分:0)
当您在Example1方法中执行void时,它会告诉您起火而忘记。
公共静态异步void Example1()
将其更改为任务;
公共静态异步任务示例1()
然后用
等待Example1()。Wait();
或者如果异步方法正在等待