异步解析许多字符串

时间:2019-01-04 14:36:01

标签: c# asynchronous

让我说我的文件内容分为

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)

但不允许

该怎么做?

3 个答案:

答案 0 :(得分:2)

这不是异步问题。使用Parallel类或PLInq:

<tr>
    <td>Od:<input name="datumz" type="text" autocomplete="off" id="datepicker" placeholder="začiatočný dátum" style="border-radius: 3px;background-color: rgb(229, 226, 230);border: 3px solid #e5e2e6;margin-left: 5px;"></td>
    <td>Do:<input name="datumk" type="text" autocomplete="off" id="date" placeholder="koncový dátum" style="border-radius: 3px;background-color: rgb(229, 226, 230);border: 3px solid #e5e2e6;margin-left: 5px;"></td>
    <td>Meno OP:<input name="opp" type="text" autocomplete="off" placeholder="meno operátora" style="border-radius: 3px;background-color: rgb(229, 226, 230);border: 3px solid #e5e2e6;margin-left: 5px;"></td>
    <td><input type="submit" value="Filtrovať" style="background-color: #dde53d;border: none;color: black;height: 35px;width: 85px;margin-left: 10px;"></td>
</tr>

答案 1 :(得分:0)

使用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");
        }

答案 2 :(得分:0)

作为另一个答案指出,您可能想使用PLINQ。假设您有一个功能:

string Parse(string str) { }

您可以像这样分析和组合字符串:

var result = contents.AsParallel().Select(Parse).Aggregate((x, y) => x + y);

这使用Select通过您的Parse函数映射您的字符串,并使用Aggregate通过串联将它们组合为一个字符串。