Func <t>总是相同的对象吗?

时间:2016-08-23 11:40:03

标签: c# thread-safety

基本上,如果我这样做......

class Bla
  T Run(Func<T> myFun)
    return myFun()

  void SomeMethod()
    Run( () => whatever() )

然后myFun总是相同的对象,或者每次都是一个新对象?或者以略微不同的方式制定......如果我对它进行锁定,是否会阻止并行执行?

1 个答案:

答案 0 :(得分:2)

此:

() => whatever()

每次都创建一个新的委托对象。

这意味着如果两个线程同时调用SomeMethod,那么每个线程都将构造自己的委托并将锁定放在Run内并不能确保只有一个线程可以运行该委托传递到Run

You can test this in this .NET Fiddle