首页 > 解决方案 > 修改存储在 AsyncLocal 中的对象

问题描述

在 C# Cookbook中有关于AsyncLocal in Concurrency 的声明:

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

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

修改存储在 中的对象有什么问题AsyncLocal?为什么它可以HttpContextAccessor以防万一?

标签: c#.netasynchronous

解决方案


据我了解,要点是可以从不同的线程访问 AsyncLocal(您可以在此答案中找到示例)。

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


推荐阅读