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 主要用于在不同线程间存储和访问不同的数据副本

AsyncLcal 和 ThreadLocal 是什么?例举代码示例说明

原文地址: https://www.cveoy.top/t/topic/iNVH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录