Console.WriteLine("有个人去4s店买车");
var tokenSource = new CancellationTokenSource();
// 下单买车,但是不确定要多久才能提车
var task1 = DoSomething(tokenSource.Token);
// 这个人的耐心只有五秒钟
var task2 = Task.Delay(5000);
// 提车和耐心上限的某一个成功了。
var res = await Task.WhenAny(task1, task2);
// 等了5秒,判断结果到底是提车还是等不下去
if (res != task1)
{
// 等不下去了的话,就退钱
tokenSource.Cancel();
Console.WriteLine($"太慢了,等不下去了。RNM退钱。{DateTime.Now:HH:mm:ss fff}");
}
Console.WriteLine("程序结束运行");
static async Task DoSomething(CancellationToken token)
{
Console.WriteLine($"这个人他下单了,然后开始等待:{DateTime.Now:HH:mm:ss fff}");
// 内部用时多久是不确定的,假设订车十分钟后才能提车
await Task.Delay(600000, token);
Console.WriteLine($"这个人他拿到车了:{DateTime.Now:HH:mm:ss fff}");
}
https://www.bilibili.com/video/BV1SS4y1o7bm/