修改存储在AsyncLocal中的对象



C#Cookbook中有一个关于AsyncLocal在并发中的声明:

您应该只在AsyncLocal中存储不可变的数据。

同时,我研究了HttpContextAccessor的实现,发现它是基于AsyncLocal实现的。在ASP.NET Core应用程序中,I可以修改从HttpContextAccessor接收的HttpContext(例如,我可以将一些数据放入HttpContext.Items或将自定义标头添加到HttpContext.Response.Headers(。

修改存储在AsyncLocal中的对象有什么问题?为什么在HttpContextAccessor的情况下是可以的?

据我所知,要点是可以从不同的线程访问AsyncLocal(您可以在这个答案中找到示例(。

对于这种情况,建议使用不可变数据是一种常见的推荐方式。

最新更新