gpt4 book ai didi

azure-service-fabric - 服务 : use IsCancellationRequested or throw exception 中 RunAsync 方法的 while 循环中什么是首选

转载 作者:行者123 更新时间:2023-12-04 08:22:32 25 4
gpt4 key购买 nike

为什么新 Service Fabric 代码的示例 RunAsync 结构如下

protected override async Task RunAsync(CancellationToken cancellationToken)
{
while(true)
{
cancellationToken.ThrowIfCancellationRequested();

await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}

而不是这个
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while(cancellationToken.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}

没有 throw 的版本不是首选吗?
The docs声明两个实现都是正确的:“系统将等待您的任务结束(通过成功完成、取消或错误)”。

最佳答案

简短的回答 - 两者都很好。我会用 ThrowIfCancellationRequested因为 IMO 这是更安全的选择。它也更加一致 - 调用链中较低的方法可以通过异常传播取消。

每当 RunAsync 中发生异常时, 服务结构 reports暂时性故障(这意味着服务在没有重新创建实例/副本的情况下重新启动)。

它对 OperationCanceledException 给予特殊处理- 如果是由传递给该方法的取消 token 抛出,则认为该方法已成功取消,不会报告任何错误。

您可以通过监控 Microsoft-ServiceFabric-Services 自己尝试一下。 ETW 事件。

关于azure-service-fabric - 服务 : use IsCancellationRequested or throw exception 中 RunAsync 方法的 while 循环中什么是首选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37525108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com