.net核心3.1/.net核心2.1上的HttpWebRequest BeginRead问题



我正在将HttpWebRequest(标准.net类(的类库助手从.net 4.6.2移动到.NETcore3.1

我发现.NET核心3.1存在以下问题:当我调用responseStream.BeginRead时,它通过堆栈调用!所以这就是问题的原因:当堆栈结束时,应用程序由于堆栈溢出错误而失败。😂

.NET 4.6.2行为不同——它在线程池上调用BeginRead。而且它可以正常工作多年,没有任何问题。

我找不到.NET core 3.1BeginRead有不同行为的原因。

如果你知道如何修复HttpWebRequestBeginRead或与我分享任何想法,请。

这是.net核心的标准行为,您的代码必须为此做好准备。

你必须在代码中进行分析ReadIAsyncResult.CompletedSynchronousy=true/false并决定该怎么做如果CompletedSynchronousy==true,则必须从函数返回。

检查文档

https://learn.microsoft.com/en-us/dotnet/api/system.iasyncresult.completedsynchronously?view=net-7.0

实现者注意事项IAsyncResult接口的大多数实现者不会使用此属性,应返回false。从.NET Framework 4.5开始,如果未正确实现此属性,则使用FromAsync(IAsyncResult、Action、TaskCreationOptions(方法创建的任务将无法完成。请参阅4.5中的应用程序兼容性。

调用方注释使用此属性确定异步操作是否同步完成。例如,如果I/O请求很小,则此属性可以为异步I/O操作返回true。

在此处查找更多详细信息https://github.com/microsoft/referencesource/issues/177

最新更新