C#中的并行与多线程编程

在处理很多数据的时候,加入C#新特性的并行和任务来实现多线程,超级有趣。

先说2个小代码。

一个是Task任务,相当于旧版的Thread多线程。但是在.net 4.0以后都统称为Task任务了。其实就是多线程。

一、Task多线程,线程结束后执行特定的代码。

Task task = new Task(() =>
{
 //这里执行工作的主体,但是不能操作界面,会造成线程崩溃。
//合理的方法是在前面就把界面元素交给特定的值,比如
//string content=txtContent.Text;然后线程内部就可以使用这个content了。
});
task.Start();//开始这个任务

task.ContinueWith((t) =>
{
//任务完成后执行这里的代码,比如一个提示,或者数据显示到界面之类的。
});

Task里面可以去循环执行持 久任务,不会卡死界面。

这里只有一个线程,真正多个分开的线程可以用List<Task>去执行。线程取消使用CancellationTokenSource 也非常简单。

有研究的朋友自己先行尝试一下吧。

 

二、Parallel并行编程

个人感觉 这块超级爽。原来fore和Foreach执行代码要花 一天的时间,这个一般只需要1个小时不到吧。

尽可能的利用了电脑的硬件资源进行并行开发。具体什么是并行编程,建议自己百度一下。也很好理解,就是每个程序分开在不同的地方去执行。个人感觉和多线程一样。

举个例子,我的数组 List<string>里面有10000万行数据。我要提取指定的包函特定关键词的数据出来。用for和foreach会折腾死人的。

我们用并行来试试吧。

ConcurrentQueue<string> data = new ConcurrentQueue<string>();
List<string> data = new List<string>();
Parallel.ForEach(Data, (oneline) =>
{
     if (oneline.indexof(" 关键词")>-1)
        data.Add(oneline);
 });
Console.WriteLine("执行完成ForEach.");

ConcurrentQueue是线程安全的队列,防止同时多个线程添加数据的时候出现死锁或者其它异常。

parallel.foreah就是遍历每一行,每一行得到的结果是online ,我们再判断每个oneline是不是包括我们要判断的

关键词。包括就存到结果里面去,最后显示出来就O了。

并行会造成界面假死,如果外面还要包装一个Task。在Task的工作代码段放下这段并行代码。

享受下超级无敌极速的体验吧。

转自:http://www.lingdonge.com/csharp/2710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值