线程Task实现异步
http://www.cnblogs.com/luminji/archive/2011/05/13/2044801.html
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。
所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。 该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。 Lambda 表达式 x => x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型,如下所示:
delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 }
使用空括号指定零个输入参数:
() => SomeMethod()
var entitlementTask = new Task<string>(() => { var synchronizeMasterSmartcard = this.synchronizeDataFactory.GetInstance(SynchronizeRange.MasterSmartcard); if (synchronizeMasterSmartcard == null) { return string.Empty; } var result = synchronizeMasterSmartcard.Synchronize(new MasterSmartcardPreconditionEntity { PortalUserId = portalUserId }); if (!string.IsNullOrEmpty(result)) { return result; } var synchronizeEntitlement = this.synchronizeDataFactory.GetInstance(SynchronizeRange.NormalEntitlement); return synchronizeEntitlement == null ? string.Empty : synchronizeEntitlement.Synchronize(new NormalEntitlmentPreconditionEntity { PortalUserId = portalUserId, SynchronizeFlag = SynchronizeFlag.Save }); }); entitlementTask.StartAndContinueWith(); return string.Empty;
所以()=>{ }相当于创建了一个委托。
delegate void TestDelegate(strings); TestDelegate testDelC = x => { Console.WriteLine(x); };
只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。 两个或更多输入参数由括在括号中的逗号分隔:
class Program { delegate void myDelegate(string str,string str2); static void Main(string[] args) { myDelegate dDelegate = (x,y) => { Console.WriteLine("输出{0}+{1}",x,y); }; dDelegate("我是x","yy"); Console.ReadLine(); } }