2013-07-18 27 views
1

我打电话库里面的方法“美孚(对象S,行动对行动)”。 因为函数本身涉及一定的执行时间,所以我使用CountDownEvents的' 来通知我函数何时完成了它的工作。活动,行动在C#中 - 在一个线程上下文

类似,

countdownEvent.Reset(); 


try 
{ 
    Foo(obj,()=> countdownEvent.Signal()); 
} 
catch(Exception e) 
{ 
    countdownEvent.Signal(); 
} 
countdownEvent.Wait(); 

的一部分,我不理解是

  1. 什么叫()=> countdownEvent.Signal()?什么是“()=>”特别代表什么?
  2. 为什么方法签名不是书面美孚(对象S,CountDownEvent事件),它可以 内部信号?
  3. 我还没有真正理解Action类。谷歌搜索了一下,但不能找到 一些超级简单的例子开始。

任何帮助表示赞赏!

+2

我的理解是,行动仅仅是一个代表。 – jfin3204

回答

2
  1. ()=>是λ结构(参见C# Lambda (=>))。通过使用lambda表达式,可以编写可作为参数传递或作为函数调用的值返回的本地函数。 Lambda表达式对编写LINQ查询表达式特别有用。但是你可以用它来写代理实现的任何类型。
  2. 您可以按照展示的方式指定相同的代码,但使用Action可以更灵活。在第一种情况下,它是一个具有声明行为的特定函数。其次 - 这是一些活动,您可以根据程序的逻辑进行更改。
  3. Action只是一个代表,这是宣布一些动态行为。它封装了一个方法具有参数不返回值。若要引用具有参数的方法返回值,请改为使用通用Func委托。当你的课程期望某些行为时,它经常被使用,并且你希望你的课堂消费者自己声明这个行为。

更新:根据VikciaR评论

+1

我会同意你的3.动作没有单一的实现:有不同数量的参数的多个实现。 Func不仅有参数,而且还有返回值。 – VikciaR

+0

@VikciaR好的,我纠正了我的答案,谢谢)) – Alex

3

() => countdownEvent.Signal()lambda expression

在这种特殊的情况是某种匿名方法没有参数,并且具有相同的返回类型countdownEvent.Signal()

1
  1. 这就是所谓的Lambda表达式。您可以将其视为简单的内联方法。 ()=>表示该方法没有参数。 (string x)=>意味着 - 一个参数。
  2. 事件和lambda表达式是类似的概念(Lambda表达式是从委托进化而来的)。阅读here
  3. MSDN是最好的:-)
相关问题