以下代码是线程安全的吗?
public object DemoObject {get;set;}
public void DemoMethod()
{
if (DemoObject is IDemoInterface demo)
{
demo.DoSomething();
}
}
如果在处理DemoObject
时其他线程修改了DemoMethod
(例如,设置为空),是否保证在if
块内始终将本地变量demo
正确分配(给一个类型的实例) IDemoInterface
)?
答案是否定的。。。也许(取决于value或reference类型)...
但是,为简单起见,请查看此example here,您将看到示例分解为以下内容,并且不是线程安全
IDemoInterface demoInterface = DemoObject as IDemoInterface;
if (demoInterface != null)
{
demoInterface.DoSomething();
}