【问题标题】:Task.Delay() cancellation not working on net7.0?Task.Delay() 取消在 net7.0 上不起作用?
【发布时间】:2022-10-14 23:05:00
【问题描述】:

有谁知道为什么await Task.Delay(longTimeOut, cancellationToken); 不会以TaskCanceledException 结束(当令牌发出信号时)并在定位net7.0 时继续等待?

net6.0 上,它按预期抛出。

【问题讨论】:

  • 请使用最少的可重复样本编辑您的帖子
  • 虽然我首先想知道,你怎么可能无法想象上面陈述的基本样板,但我已经意识到你的观点......将在答案中发布。
  • 你在抓TaskCanceledException OperationCanceledException 还是别的什么?

标签: c# .net


【解决方案1】:

这里看起来不错;输出:

TaskCanceledException
Took: 00:00:03.0577829

dotnet--信息:

.NET SDK:
 Version:   7.0.100-rc.2.22477.23
 Commit:    0a5360315a

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.22000
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:Program Filesdotnetsdk.0.100-rc.2.22477.23

Host:
  Version:      7.0.0-rc.2.22472.3
  Architecture: x64
  Commit:       550605cc93

测试:

var cancel = new CancellationTokenSource();
cancel.CancelAfter(TimeSpan.FromSeconds(3));
var watch = Stopwatch.StartNew();
try
{
    // works identically if a large integer is passed
    await Task.Delay(TimeSpan.FromHours(1), cancel.Token);
    Console.WriteLine("no fault");
}
catch (Exception ex)
{
    Console.WriteLine(ex.GetType().Name);
}
watch.Stop();
Console.WriteLine($"Took: {watch.Elapsed}");

如果您看到不同的东西:请发布一个完整的可运行示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多