如何使用并行foreach添加字符串而没有任何问题?

use*_*487 0 c# string parallel-processing parallel.foreach

这是我目前的代码:

Parallel.ForEach(Arguments, Argument =>
{
    if (Argument != Command_Name)
    {
        WebRequest web_request = WebRequest.Create("https://www.aol.com/?command=1&domain=" + Argument);
        web_request.Timeout = 5000;
        ((HttpWebRequest)web_request).UserAgent = "Mozilla Firefox 5.0";
        HttpWebResponse web_response = (HttpWebResponse)web_request.GetResponse();
        StreamReader response = new StreamReader(web_response.GetResponseStream(), Encoding.UTF8);
        Message += Argument + " => " + response.ReadToEnd() + Environment.NewLine;
    }
});
Run Code Online (Sandbox Code Playgroud)

此代码无法正常工作,我正在寻找一个小的替代品.此代码返回Message字符串中的一些参数...多线程字符串添加的好方法是什么?这就是我需要的.

更多信息:消息字符串有时会返回a,b和c,而其他消息字符串只返回a或b ...

感谢您的帮助,谢谢!

Sel*_*enç 5

您可以使用线程安全的集合来存储消息,例如ConcurrentBag<T>.然后在循环之后进行循环:

var messages = new ConcurrentBag<string>();
Parallel.ForEach(Arguments, Argument =>
{
   ... 
   messages.Add(Argument + " => " + response.ReadToEnd());
}
var result = string.Join(Environment.NewLine, messages);
Run Code Online (Sandbox Code Playgroud)