gpt4 book ai didi

c# - .NET 6 API 终结点的取消行为在本地和 Azure 应用服务 Linux 托管之间有所不同

转载 作者:行者123 更新时间:2023-12-03 06:19:01 24 4
gpt4 key购买 nike

我在 .NET 6 API 的端点中有以下代码片段,其中请求处于循环状态,直到找到可行的条件返回:

while (true)
{
try
{
cancellationToken.ThrowIfCancellationRequested();
}
catch
{
_unitOfWork.ResetContextState();

if (cancellationToken.IsCancellationRequested)
{
}
}
}

cancellationToken 变量是 System.Threading 包中 CancellationToken 类型的对象,我直接在 API Controller 中接收该对象。该对象由.NET直接发送和控制。

在本地主机上运行时,如果我取消请求,代码将进入 catch block ,然后进入 if 语句 (cancellationToken.IsCancellationRequested)。但是,当 API 托管在 Azure 应用服务 Linux 上时,取消请求时不会遵循相同的流程,而是会突然终止请求。有谁知道为什么会发生这种情况吗?

提前感谢大家!

最佳答案

我猜差异在于 Azure App Service您的应用程序位于在 Windows 上运行 IIS 的负载均衡器后面,not really exposed ,看起来事件没有被转发:

Cancellationtoken not Triggering when using IIS

虽然 github 问题已经很老了,但可能有一些可配置的东西吗? Like this ,完全不同的问题,但仍在修改与 Azure 负载均衡器相关的 Azure 应用服务默认行为。

似乎 IIS/Windows 部分不再是最新的: https://devblogs.microsoft.com/dotnet/bringing-kestrel-and-yarp-to-azure-app-services/

关于c# - .NET 6 API 终结点的取消行为在本地和 Azure 应用服务 Linux 托管之间有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76025094/

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