fre*_*hie 2 c# extension-methods multithreading thread-safety
我有一个非常简单的扩展方法,如下所示:
public static string ToUserPageTimeFormat(this DateTime TheTime)
{
return TheTime.Month + "." + TheTime.Day + "." + TheTime.Year + "." + TheTime.Hour + "." + TheTime.Minute;
}
Run Code Online (Sandbox Code Playgroud)
我把它做成了一行.这保证是线程安全的吗?
是的,它是线程安全的.从本质上讲,您的方法将拥有自己的DateTime
参数私有副本, 因为它是通过值传递的 - 首先创建一个副本然后传递给该方法.此副本对方法是私有的,并且对其他线程不可见 - 因此不可能被它们变更.
这会不会是这样,如果你用了一个ref
参数:
// Not thread-safe.
public static string ToUserPageTimeFormat(ref DateTime TheTime){ ... }
Run Code Online (Sandbox Code Playgroud)
在这样一个假设的场景中,参数可以在执行此方法的其他线程上进行变异.DateTime
在这种情况下,不可变类型的事实是无关紧要的,因为它是一个结构,并且结构不拥有自己的存储.
例如,这种方法有可能返回"不可能"的格式化日期,例如"2.31.2012.14.33",这是由多次写入操作中的"撕裂"读取引起的.
归档时间: |
|
查看次数: |
1728 次 |
最近记录: |