Console.WriteLine(message);
Console.WriteLine();
},
null);
Console.WriteLine("第一步操作已经完成。现在主程序继续进行!");
Console.WriteLine("线程的 Id: {0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine();
// 等待第二个线程完成
while (!result.IsCompleted)
{
Thread.Sleep(10);
}
Console.WriteLine("注意,此时第三步操作已经完成,回车后结束程序。");
Console.WriteLine();
Console.ReadLine();
}
}
}
APM
------解决方案--------------------你在异步回调中Thread.Sleep(6000);是毫无意义的,那个result.IsCompleted指示了异步操作的完成,并不是异步回调的完成,当异步操作完成后,就会更改IsCompleted的属性值为true,并执行异步回调函数。
既然你用到了异步回调函数,根本不需要在主线程中轮询异步状态,直接把后续操作写在异步回调中即可。
------解决方案--------------------
这种垃圾代码一定要尽一切可能去避免。
主线程异步调用某个操作,它只要把回调方法作为参数注册给调用操作,然后就结束了。
主线程一旦阻塞在那里去轮询你的标志,主线程还能干正经事吗?此时你的程序就看起来“卡死了”。
因此异步调用操作,就不应该出现什么“循环”代码。这种垃圾代码一定要尽可能去避免。