核心编程_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 核心编程

核心编程

 2014/11/3 19:42:33  诺贝尔  程序员俱乐部  我要评论(0)
  • 摘要:一.代码协定1.前提条件Contract.Requires(bool).EndContractBlock();用于兼容旧if判断代码2.后置条件.Ensures(bool).Result<type>()返回值.OldValue<type>(x)返回参数的原始值.ValueAtResult(outx)返回out参数的值3.集合检查.Exists()任一项满足条件.ForAll()所有项满足条件4.恒等式条件.Invariant(bool)5
  • 标签:编程

一.代码协定

1.前提条件

Contract.Requires(bool)

.EndContractBlock();用于兼容旧if判断代码

2.后置条件

.Ensures(bool)

.Result<type>() 返回值

.OldValue<type>(x)返回参数的原始值

.ValueAtResult(out x)返回out参数的值

3.集合检查

.Exists()任一项满足条件

.ForAll()所有项满足条件

4.恒等式条件

.Invariant(bool)

5.接口绑定协定

[ContractClass(typeof(协定实现类))]  接口特性

[ContractClassFor(typeof(接口))] 协定实现类特性

[pure] 常态操作特性

二、并行操作

1.任务

Task t1=new Task(Action<object>);创建新任务

Task t3=new Task(Func<object, result>, data);创建可返回结果的任务

//TaskCreationOptions 指定任务类型

t1.Start();开始运行

Task t2 = t1.ContinueWith(Action<Task>);后继任务,参数为上个任务

//TaskCreationOptions 指定启动时机

t3.Start()

t3.Wait()等待任务完成

t3.Result 提取结果

2.多任务

Parallel.For(0,9,Action<int>); 从0~9重复执行同一个方法

Parallel.For(0,9,Action<int,ParallelLoopState>); ParallelLoopState控制迭代流程

Parallel.For(0,9,Func<init>,Func<int, ParallelLoopState, init, init2>,Action<init2>); Func<init>初始化任务,第二个Func是每次迭代执行的函数,任务返回值交由Action处理。(任务数可能少于迭代次数,也就是系统会重用某一任务,而开始和结尾只有创建任务和结束任务才会调用,函数之间传递的信息需要特别留意)

Parallel.ForEach(source<t>, Action<t>) 同步迭代数据源

Parallel.ForEach(source<t>,Action<t,ParallelLoopState, int>) 带迭代次数和控制参数的版本

3.终止任务

CancellationToken 控制参数

CancellationTokenSource cts=new CancellationTokenSource(); //创建控制参数

cts.Token.Register(Action); //注册取消后执行的方法

cts.Cancel(bool);//取消任务

cts.Token //即CancellationToken

取消任务会产生OperationCanceledException异常

cts.Token.IsCancellationRequested  是否取消任务

cts.Token.ThrowIfCancellationRequested(); 取消状态下抛出异常

4.共享资源管理

lock(obj) 锁定对象, 或者在该对象内部进行锁定处理可将该对象定义为线程安全对象。

多个锁定对象锁定顺序不一致,可能导致死锁。(个人看法:要么保持锁定顺序一致,要么不要锁定多个关联对象,方法一,改造成线程安全对象,并且每个对象不在解锁前访问另一个线程安全对象;方法二,用单一的锁定对象包裹关联对象,让它们成为一个整体(因为保持顺序一致较难))。

lock(this) 危险语句,因为对象可能在对象外部被锁定。应该用对象的私有成员做锁定标志。

发表评论
用户名: 匿名