[英]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.1對BeginRead
有不同行為的原因。
如果您知道如何修復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.