加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c#中多次同时运行一个方法

发布时间:2020-12-16 00:18:49 所属栏目:百科 来源:网络整理
导读:我有一个返回 XML元素的方法,但该方法需要一些时间来完成并返回一个值. 我现在拥有的是什么 foreach (var t in s){ r.add(method(test));} 但这只会在上一个完成之后运行下一个语句.如何让它同时运行? 解决方法 您应该可以使用此任务: //first start a tas
我有一个返回 XML元素的方法,但该方法需要一些时间来完成并返回一个值.

我现在拥有的是什么

foreach (var t in s)
{
    r.add(method(test));
}

但这只会在上一个完成之后运行下一个语句.如何让它同时运行?

解决方法

您应该可以使用此任务:

//first start a task for each element in s,and add the tasks to the tasks collection
var tasks = new List<Task>();
foreach( var t in s)
{
    tasks.Add(Task.Factory.StartNew(method(t)));
}

//then wait for all tasks to complete asyncronously
Task.WaitAll(tasks);

//then add the result of all the tasks to r in a treadsafe fashion
foreach( var task in tasks)
{
  r.Add(task.Result);
}

编辑
上面的代码存在一些问题.有关工作版本,请参阅以下代码.在这里,我还重写了循环以使用LINQ来实现可读性问题(在第一个循环的情况下,为了避免lambda表达式中的t闭包导致问题).

var tasks = s.Select(t => Task<int>.Factory.StartNew(() => method(t))).ToArray();

//then wait for all tasks to complete asyncronously
Task.WaitAll(tasks);

//then add the result of all the tasks to r in a treadsafe fashion
r = tasks.Select(task => task.Result).ToList();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读