Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在backgroundworker调用之间线程本地存储是否持久化?_C#_.net_Multithreading_Backgroundworker_Thread Local - Fatal编程技术网

C# 在backgroundworker调用之间线程本地存储是否持久化?

C# 在backgroundworker调用之间线程本地存储是否持久化?,c#,.net,multithreading,backgroundworker,thread-local,C#,.net,Multithreading,Backgroundworker,Thread Local,是否重复使用backgroundworker线程 具体地说,如果我在backgroundworker的DoWork()方法期间设置了一个命名的数据槽(线程本地存储),那么该数据槽的值是否会保持不变,以后可能会被其他线程发现 我本来不会这么想的,但我有一只虫子 编辑:建议使用a,这意味着线程被重复使用。所以问题就变成了,;重复使用的线程是否可能在调用之间保留线程本地存储?需要检查源(或通过反射器)以确定是否在MSDN中未指定 如果没有指定,您就不能依赖当前行为,因为它在将来的.NET版本中不会改变

是否重复使用backgroundworker线程

具体地说,如果我在backgroundworker的DoWork()方法期间设置了一个命名的数据槽(线程本地存储),那么该数据槽的值是否会保持不变,以后可能会被其他线程发现

我本来不会这么想的,但我有一只虫子


编辑:建议使用a,这意味着线程被重复使用。所以问题就变成了,;重复使用的线程是否可能在调用之间保留线程本地存储?

需要检查源(或通过反射器)以确定是否在MSDN中未指定

如果没有指定,您就不能依赖当前行为,因为它在将来的.NET版本中不会改变


编辑:看起来它正在使用线程池,因此线程将被重新使用。

当线程池重新使用线程时,它不会清除线程本地存储或标记为ThreadStaticAttribute的字段中的数据。因此,由一个方法放置在线程本地存储中的数据可以公开给由同一线程池线程执行的任何其他方法。访问标有ThreadStaticAttribute属性的字段的方法可能会遇到不同的数据,具体取决于线程池线程执行它

资料来源: