C#Cookbook中有一个关于AsyncLocal在并发中的声明:
您应该只在AsyncLocal中存储不可变的数据。
同时,我研究了HttpContextAccessor的实现,发现它是基于AsyncLocal
实现的。在ASP.NET Core
应用程序中,I可以修改从HttpContextAccessor
接收的HttpContext
(例如,我可以将一些数据放入HttpContext.Items
或将自定义标头添加到HttpContext.Response.Headers
(。
修改存储在AsyncLocal
中的对象有什么问题?为什么在HttpContextAccessor
的情况下是可以的?
据我所知,要点是可以从不同的线程访问AsyncLocal(您可以在这个答案中找到示例(。
对于这种情况,建议使用不可变数据是一种常见的推荐方式。