线程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();
        }
    }

 

 

 

posted @ 2012-08-10 10:11  多远才是未来  阅读(209)  评论(0编辑  收藏  举报