繁体   English   中英

异步解析许多字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM