[英]async parse many strings
可以说我的文件内容分为
List<string> contents
现在我想对所有内容进行一些解析方法,最后我想将它们粘贴到一个变量中
//after parsing
foreach(var c in content)
wholeContent += c;
我已经尝试过这样的事情:
async Task<string> Parse(string content)
{
//dosth
}
List<Task<string>> tasks = contents.Select(x=> Parse(x));
但要做到这一点,我必须具备:
async Task Parse(ref string content)
但这是不允许的
怎么做?
这不是一个异步问题。 使用Parallel类或PLInq:
var results = contents.AsParallel().Select(c => /* some sync code here */);
使用Parallel类,例如可以将一个简单的for循环并行化:
List<string> contents = new List<string>();
contents.Add("55");
contents.Add("some text");
contents.Add("a lone 5");
ConcurrentDictionary<int, string> concurrent = new ConcurrentDictionary<int, string>();
Parallel.For(0, contents.Count, i => concurrent[i] = Parse(contents[i]));
foreach(string s in concurrent.Values)
{
Console.WriteLine(s);
}
解析函数本身:
public static string Parse(string content)
{
return content.Replace("5", "test");
}
另一个答案指出,您可能想使用PLINQ。 假设您有一个功能:
string Parse(string str) { }
您可以像这样分析和组合字符串:
var result = contents.AsParallel().Select(Parse).Aggregate((x, y) => x + y);
这将使用Select
来通过您的Parse函数映射您的字符串,并使用Aggregate
通过串联将它们组合为一个字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.