C#Task线程并发简单示例

最近项目中遇到一个应用场景,即需要调用同一个函数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);

你可能感兴趣的:(C#,c#,java,开发语言,并发线程)