AsyncLcal 和 ThreadLocal 是什么?例举代码示例说明
AsyncLocal 和 ThreadLocal 都是 .NET 中用于存储线程本地数据的类。
AsyncLocal 是在异步上下文中存储数据的类。它允许在异步操作之间传递上下文数据,以便在整个异步操作链中访问。以下是一个示例代码:
static AsyncLocal<string> asyncLocalData = new AsyncLocal<string>();
static async Task Main(string[] args)
{
asyncLocalData.Value = "Hello";
await FirstAsync();
Console.WriteLine(asyncLocalData.Value); // Output: World
}
static async Task FirstAsync()
{
await Task.Delay(100);
Console.WriteLine(asyncLocalData.Value); // Output: Hello
asyncLocalData.Value = "World";
await SecondAsync();
}
static async Task SecondAsync()
{
await Task.Delay(100);
Console.WriteLine(asyncLocalData.Value); // Output: World
}
在上面的示例中,我们使用 AsyncLocal
ThreadLocal 是在线程上下文中存储数据的类。它允许在不同线程间存储和访问不同的数据副本。以下是一个示例代码:
static ThreadLocal<string> threadLocalData = new ThreadLocal<string>();
static void Main(string[] args)
{
threadLocalData.Value = "Hello";
Task.Run(() =>
{
Console.WriteLine(threadLocalData.Value); // Output: null
threadLocalData.Value = "World";
Console.WriteLine(threadLocalData.Value); // Output: World
}).Wait();
Console.WriteLine(threadLocalData.Value); // Output: Hello
}
在上面的示例中,我们使用 ThreadLocal
需要注意的是,AsyncLocal 主要用于异步操作中传递上下文数据,而 ThreadLocal 主要用于在不同线程间存储和访问不同的数据副本
原文地址: https://www.cveoy.top/t/topic/iNVH 著作权归作者所有。请勿转载和采集!