• Hello C#5.0新特性


      C#5.0最大的新特性,莫过于Async和Parallel。

      以往我们为了让用户界面保持相应,我们可以直接使用异步委托或是System.Threading命名空间中的成员,但System.Threading.Tasks命名空间提供了一种更加简洁的方法---使用Task类。Task类可以轻松地在次线程中调用方法,可以作为异步委托的简单替代品。

      关于Async,可以参考MSDN的Task 类以及使用 Async 和 Await 的异步编程(C# 和 Visual Basic),其介绍了其中的方法、属性等,讲的都比LZ要好。

      下面我们实现一个异步调用的例子,看看用法有什么不同。

      我想要的是:异步执行方法,在方法执行后紧接着异步执行另一个方法,该方法以前面的方法结果为参数

    using System;
    using System.Threading.Tasks;
    //异步执行方法,在方法执行后紧接着异步执行另一个方法,该方法以前面的方法结果为参数
    namespace AsyncTask
    {
        class result
        {
            public int number { set; get; }
        }
        class Program
        {
            static void Main(string[] args)
            {
                var result = new result { number = 4 };
                var t1 = new Task(First, result);//Action
                var t2 = t1.ContinueWith<int>(First1);//Func
                var t3 = t1.ContinueWith<int>(First2);
                t1.Start();
                Console.WriteLine(t2.Result);//t.Result
                Console.WriteLine(t3.Result);
                Console.ReadKey();
            }
    
            static void First(object o)
            {
                result x = (result)o;
                x.number *= 2;
            }
    
            static int First1(Task o)
            {
                result x = (result)o.AsyncState;//
                return x.number * x.number;
            }
    
            static int First2(Task o)
            {
                result x = (result)o.AsyncState;
                return x.number * x.number * x.number;
            }
    
        }
    }

      可以对比DebugLZQ的.NET异步编程总结----四种实现模式,看看同样为异步,实现方法有什么不同。
      关于Parallel,现在双核(多核)的计算机已经很普片,计算机有多个CPU,就能够以并行的方式执行线程,这将大大改善应用程序的运行时性能。

      总体而言,System.Threading.Tasks中的类型(以及System.Threading中的一些相关类型)被称为任务并行库(Task Parallel Library,TPL)。TPL使用CLR线程池自动将应用程序的工作动态分配到可用的CPU中。TPL还处理工作分区、线程调度、状态管理和其他低级别的细节操作。TPL中最重要的类是System.Threading.Tasks.Parallel,它提供大量的方法,能够以并行的方式迭代数据集合(实现了IEnumberable<T>的对象)。该类支持两个主要的静态方法---Parallel.For()和Parallel.ForEach()  (Parallel.Invoke())每个方法都有很多的重载版本。

      MSDN Parallel 类.NET Framework 中的并行编程 可以参考,以For为例

    using System.Threading.Tasks;
    
    namespace ParallelFor
    {
        class Test
        {
            static int N = 1000;
    
            static void TestMethod()
            {
                // Using a named method.
                Parallel.For(0, N, Method2);
    
                // Using an anonymous method.
                Parallel.For(0, N, delegate(int i)
                {
                    // Do Work.
                });
    
                // Using a lambda expression.
                Parallel.For(0, N, i =>
                {
                    // Do Work.
                });
            }
    
            static void Method2(int i)
            {
                // Do work.
            }
        }
    }

    ForEach、Invoke类似

                Parallel.ForEach(new[] {1, 2, 3, 4, 5},
                                 i =>
                                 Console.WriteLine("{0}, Task: {1}, Thread {2}", i, Task.CurrentId,
                                                   Thread.CurrentThread.ManagedThreadId));
                    Parallel.Invoke(
                        BasicAction,    // Param #0 - static method
                        () =>            // Param #1 - lambda expression
                        {
                            Console.WriteLine("Method=beta, Thread={0}", Thread.CurrentThread.ManagedThreadId);
                        },
                        delegate()        // Param #2 - in-line delegate
                        {
                            Console.WriteLine("Method=gamma, Thread={0}", Thread.CurrentThread.ManagedThreadId);
                        }
                    );

    最后:关于Parallel和Async不是LZ一篇博文就能解释的清楚,LZ没有实际的用过,不敢说咋滴咋滴...博文是个人的理解,难免出现纰漏,欢迎批评指正!关于学习方面,中文的书籍普遍比较滞后,针对个人的需求并非所有的英文书籍都有翻译版,加之翻译者个人理解及翻译风格的原因,最终...

    关于新书,公司给买了本:

    书比较厚,1k来页,英文的书籍看起来比较慢,但是看起来很舒服。

  • 相关阅读:
    java文件分片上传,断点续传
    java-webuploader+Java如何实现分片+断点续传
    JAVA支持HTTP断点续传
    用Java 实现断点续传 (HTTP)
    java实现视频断点上传文件
    关于java实现断点续传的上传下载功能问题
    java文件断点续传的简单实现
    java实现文件的断点续传
    java HTTP文件断点上传
    怎样用Google APIs和Google的应用系统进行集成(5)----怎样把Google Tasks的JSON Schema转换成XML的Schema(XSD)?
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/2993993.html
Copyright © 2020-2023  润新知