簡體   English   中英

.net 核心 3.1 / .net 核心 2.1 上的 HttpWebRequest BeginRead 問題

[英]HttpWebRequest BeginRead issue on .net core 3.1 / .net core 2.1

我正在將HttpWebRequest (標准 .net 類)的 class 庫助手從.NET 4.6.2移動到.NET core 3.1

我發現.NET 核心 3.1存在以下問題:當我調用responseStream.BeginRead時,它通過堆棧調用:所以這是問題的原因。 當堆棧結束時,應用程序因堆棧溢出錯誤而失敗。

.NET 4.6.2行為不同 - 它在線程池上調用BeginRead 它可以正常工作多年,沒有任何問題。

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

如果您知道如何修復HttpWebRequest BeginRead或與我分享任何想法,請。

這是 .net 內核的標准行為,您的代碼必須為此做好准備。

您必須在代碼中分析ReadIAsyncResult.CompletedSynchronously == true/false並決定如何執行此操作,如果 CompletedSynchronously == true 您必須從 function 返回。

檢查文檔

https://learn.microsoft.com/en-us/do.net/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM