C#Task线程并发简单示例

文章讲述了在项目中通过将顺序执行的256次函数调用改为并发处理,显著减少了总耗时。通过创建Task并行执行,将原本5.12秒的总耗时降低到20毫秒,提高了软件执行效率。代码示例展示了如何使用C#创建并发任务并获取结果。
摘要由CSDN通过智能技术生成

最近项目中遇到一个应用场景,即需要调用同一个函数256次(函数执行时长20毫秒,耗时总长为20*256毫秒,即5.12秒),每次传入的参数略有不同,最后根据返回结果从中选择正确的那一次调用结果,最初采用一个for循环,每次都从0开始至255结束,后来想到可以用并发思路,一次性生成256个Task,这样耗时相当于一个Task的时长,从5120毫秒的总耗时下降到20毫秒,大大提高了软件的执行效率。

下面用一个示例来说明,整个过程只需要三步,分别是:第一步,首先我们创建两个类,分别代表传入的参数和返回的结果

//传入的参数类
public class Model
{
	public int Number{get;set;}
}

//返回的结果类
public class Result
{
	public int Value{get;set;}
	public Model Source{get;set;}
}

第二步,编写一个用于并发调用的函数

//并发函数
public Result Concurrency(object state)
{
	Model model = state as Model;
	Result result = new Result();
	result.Source = model;
	if(model.Number == 999)
	{
		result.Value = 1;
	}
	//模拟耗时
	Thread.Sleep(20);
	return result;
}

第三步,编写并发代码,实现并发流程

List<Task> tasks = new List<Task>();
for(int = 0;i < 1000;i++)
{
	Model state = new Model(){Number=i};
	var task = Task<Result>.Factory.StartNew(new Func<object,Result>(Method),state);
	tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());

//待所有Task都运行完毕后,从中筛选正确的结果
var t = tasks.FirstOrDefault(item=>((Task<Result>(item).Result.Value == 1) as Task<Result>;
MessageBox.Show("Source="+t.Result.Source.Number);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值