我目前正在深入阅读 C#(第 3 版),给出的警告之一是使用带有 task.wait 的 GUI 线程是危险的,因为它可能导致死锁。但这不是 ThreadPool 或 Console 的问题。我的问题是为什么运行 task.wait 的线程不会死锁,所以对于以下代码(取自书中),即使是控制台应用程序(后台)线程也不会因为它会死锁而陷入困境。
public static void Main(string[] args = null)
{
var source = new CancellationTokenSource();
var task = TestInt(source.Token);
source.CancelAfter(4000);
Console.WriteLine("Status {0}",task.Status);
try
{
task.Wait();
}
catch (AggregateException e)
{
Console.WriteLine("Caught {0}",e.InnerExceptions[0]);
}
Console.WriteLine("Final Status: {0}",task.Status);
Console.ReadKey();
}
public static async Task TestInt(CancellationToken token, double start = 1)
{
await Task.Delay(TimeSpan.FromSeconds(30), token);
}
感谢您