无连接(例如 UDP)套接字的 SendFile 方法系列的行为现在在所有平台上都是一致的。 受影响的方法现在会在所有平台上引发 NotSupportedException。
以前的行为
以前,对于不需要Socket连接的情况(例如 UDP),观察到以下行为:
- SendFile 在 Windows 上会引发 NotSupportedException,但在类似 Unix 的平台上不会引发。
- 从 ValueTask 返回的 SendFileAsync 在所有平台上存储 SocketException。
- 针对从 EndSendFile 返回的 IAsyncResult 调用 BeginSendFile 会在所有平台上引发 SocketException。
新行为
从 .NET 8 开始,对于无连接的 Socket(例如 UDP),将观察到以下行为:
- SendFile 会在所有平台上引发 NotSupportedException。
- 从 ValueTask 返回的 SendFileAsync 会在所有平台上存储 NotSupportedException。
- 针对从 EndSendFile 返回的 IAsyncResult 调用 BeginSendFile 会在所有平台上引发 NotSupportedException。
已引入的版本
.NET 8 RC 1
破坏性变更的类型
此更改为行为更改。
更改原因
考虑到SendFile
通常用于处理大量数据,因此将它与无连接套接字一起使用并不合适。 此外,以前的行为不一致,在某些平台上抛出SocketException
,而在其他平台上则成功但结果不可预测。
建议的措施
请勿对无连接套接字使用 SendFile
方法。