現在、C# の詳細 (第 3 版) を読んでいますが、表示された警告の 1 つは、GUI スレッドを task.wait で使用するとデッドロックが発生する可能性があるため危険であるというものです。ただし、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);
}
ありがとうございます