C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)

学习书籍: <C#本质论>

1--C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq).

其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式).

--用AggregateException处理Task上的未处理异常.

--取消任务. CancellationToken

--async修饰方法, 返回Task. task.wait(100)可以阻塞现场. async方法内await 启线程执行.

==> 第一部分, 5.0推荐的线程使用方式.

2--学习了Task 等线程同步使用方式:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Task1
{
    class Program
    {
        const int _Total = 99999;
        static long _Count = 0;
        readonly static object _Sync = new Object();
        static void Main(string[] args)
        {
            //Task task = Task.Run(()=>Decrement());
            //for (int i = 0; i < _Total; i++)
            //{
            //    _Count++;
            //}
            //task.Wait();
            //Console.WriteLine("Count = {0}", _Count);
            //CountAsync();
            //int x = 0;
            //Parallel.For(0, 999999, i =>
            //    {
            //        x++;
            //        x--;
            //    });
            //Console.WriteLine("Count = {0}",x);
            Task task = Task.Run(() => Decrement());
            for (int i = 0; i < _Total; i++)
            {
                bool lockTaken = false;
                try
                {
                    Monitor.Enter(_Sync, ref lockTaken);
                    _Count++;
                }
                finally
                {
                    if (lockTaken)
                    {
                        Monitor.Enter(_Sync);
                    }
                }
            }
            task.Wait();
            Console.WriteLine("Count = {0}", _Count);
            Console.ReadKey();
        }
        public static async void CountAsync()
        {
            Task task = Task.Run(() => Decrement());
            for (int i = 0; i < _Total; i++)
            {
                _Count++;
            }
            await task;
            Console.WriteLine("Count = {0}", _Count);
        }
        static void Decrement()
        {
            for (int i = 0; i < _Total; i++)
            {
                bool lockTaken = false;
                try
                {
                    Monitor.Enter(_Sync, ref lockTaken);
                    _Count--;
                }
                finally
                {
                    if (lockTaken)
                    {
                        Monitor.Exit(_Sync);
                    }
                }
            }
        }
    }
}

==> 第二部分.

TPL和C#5.0之前的多线程模式

1. 调用APM
            #region
            String url = "www.baidu.com";
            if (args.Length > 0)
            {
                url = args[0];
            }
            Console.WriteLine(url);
            WebRequest webRequest = WebRequest.Create(url);
            IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);
            while(!asyncResult.AsyncWaitHandle.WaitOne(100))
            {
                Console.Write(".");
            }
            WebResponse response = webRequest.EndGetResponse(asyncResult);
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                int length = reader.ReadToEnd().Length;
                Console.WriteLine(length);
            }

2-- 复杂带状态的操作

1--CPS 连续调用样式. 的fire-and-forget模式. 减少了直接再beginXXX方法后调用EndXXX方法.

通过CPS,"登记"异步方法结束时执行的代码.

3-- 在APM方法间传递状态

1--可以通过Lambda完成委托BeginXXX调用.

时间: 2024-08-25 18:56:46

C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)的相关文章

实现基于Task的异步模式

返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编译器会使用TAP执行必要的转换从而异步地实现方法.这样的方法应该返回Task或者Task<TResult>类型.在后者的案例中,方法体应该返回一个TResult,且编译器将确保通过返回的Task<TResult>是可利用的.相似地,方法体内未经处理的异常会被封送到输出的task,造成返

Task的异步模式

Task的异步模式 返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编译器会使用TAP执行必要的转换从而异步地实现方法.这样的方法应该返回Task或者Task<TResult>类型.在后者的案例中,方法体应该返回一个TResult,且编译器将确保通过返回的Task<TResult>是可利用的.相似地,方法体内未经处理的异常会被封送到输

实践基于Task的异步模式

Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueWith的方法实现的.基于语言的异步支持通过允许在正常控制流内部等待异步操作隐藏callbacks,具有和编译器生成的代码相同的API级别的支持. 在.Net 4.5,C#直接异步地支持等待的Task和Task<TResult>,在C#中使用"await"关键字.如果等待一个Ta

推荐8个实现 SVG 动画的 JavaScript 库

SVG 是一种分辨率无关的图形(矢量图形).这意味着它在任何类型的屏幕都不会遭受任何质量损失.除此之外,你可以让 SVG 灵活现一些动画效果.这篇文章就给大家推荐8个实现 SVG 动画的 JavaScript 库. 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型 jQuery 图片轮播插件 1. W

Retrofit 2.0:迄今为止最大的更新最好的Android HTTP客户端库

前言 来自移动支付公司square公司的作品,开源世界top5的最小公司,首先我自己是一个忠实广场粉,okhttp.picasso.greendao.okio等等~ 据Square CTO Bob Lee的说法,Square已经将超过60个项目提交到开源社区,贡献了25万行左右的代码. 原文:Retrofit 2.0: The biggest update yet on the best HTTP Client Library for Android 因为其简单与出色的性能,Retrofit 是

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中,看一些一线的技术文档很吃力,而且考虑到国内那些技术牛人英语都不差的,要向他们看齐,所以每天下班都在疯狂地背单词,博客有些日子没有更新了,见谅见谅 什么是TPL? Task Parallel Library (TPL), 在.NET Framework 4微软推出TPL,并把TPL作为编写多线程和并行代码的首选方式,但是,在国内,到目前为止好像用的人并不多.(TPL)是System.Threading和System.Threading.Tasks命名空间中的一组公共类型和API .

imagemap的推荐使用方法,前端自适应image maps库

1.map在浏览器的兼容性相对来说是比较好的,这是我在项目中的一个处理方法 推荐到下面网站去画map http://imagemap-generator.dariodomi.de/ 2.画完去github上拉一下代码 https://github.com/stowball/jQuery-rwdImageMaps 这个库非常好用,支持自适应.注意图片的大小设置与画第一点画map的大小保持一致.

从0开始学算法--排序(1.12c++利用标准库排序)

1,简单数组按升序排序 sort(a,a+n); #include <algorithm> #include <iostream> #include <cstring> #include <vector> #include <cstdio> #include <cmath> #include <queue> using namespace std; const int maxn=1e5+10; int a[maxn]; i

《大大李带你玩转XenServer 7.0系列》 三、挂载ISO Library(ISO库)

安装好XenServer后需要在上面安装我们的虚拟机,这就需要用到ISO镜像文件,在XenCenter下是不能像VMware vSphere Client那样直接挂载我们电脑中的ISO文件,而是需要用到我们的共享文件夹.当然了创建这种类型的 SR 对于创建共享 ISO 库 (例如,VM 安装映像)非常有用. 系统提供了两种 ISO SR 类型,来处理以 ISO 格式文件存储的 CD 映像 : NFS ISO SR 类型处理以 ISO 格式文件存储且作为 NFS 共享提供的 CD 映像: CIFS