我有一个非常简单的扩展方法,如下所示:
public static string ToUserPageTimeFormat(this DateTime TheTime)
{
return TheTime.Month + "." + TheTime.Day + "." + TheTime.Year + "." + TheTime.Hour + "." + TheTime.Minute;
}
我在一行中做到了。这保证是线程安全的吗?
最佳答案
是的,它是线程安全的。本质上,您的方法将拥有自己的 DateTime
参数的私有(private)副本,因为它由 value 传递 - 首先创建一个副本,然后将其交给该方法。此副本是该方法私有(private)的,对其他线程不可见 - 因此不可能被它们更改。
如果您使用了 ref
参数,则不会是这种情况:
// Not thread-safe.
public static string ToUserPageTimeFormat(ref DateTime TheTime){ ... }
在这样的假设场景中,参数可能在执行此方法的过程中在另一个线程上发生变化。 DateTime
是不可变类型这一事实在这种情况下无关紧要,因为它是一个结构,并且 a struct does not own its own storage .
例如,此方法可能会返回一个“不可能”的格式化日期,例如“2.31.2012.14.33”,这是由于多次写入操作中的“撕裂”读取造成的。
关于c# - 线程安全的扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8956667/