C# 多线程字符串数组

C# Multithreading String Array

我感到非常困惑...我正在尝试实现对 Web API 的异步 C# 调用以转换值列表,我期望的结果是另一个 1 对 1 方式的列表。我们不介意顺序,我们只对速度感兴趣,据我们所知,服务器能够处理负载。

private object ReadFileToEnd(string filePath)
{
    //file read logic and validations...
    string[] rowData = new string[4]; //array with initial value
    rowData = translateData(rowData);
}

private async Task<List<string>> translateData(string[] Collection)
{
     //The resulting string collection.
     List<string> resultCollection = new List<string>();

     Dictionary dict = new Dictionary();

     foreach (string value in Collection)
     {
         Person person = await Task.Run(() => dict.getNewValue(param1, param2, value.Substring(0, 10)));

         value.Remove(0, 10);

         resultCollection.Add(person.Property1 + value);
     }

     return resultCollection;
}

我可能还有其他问题,例如 return 类型,我就是无法正常工作。我的主要关注点是多线程和 returning 字符串数组。主线程来自 ReadFileToEnd(...) 已经注意到如果我添加 await 它将需要向函数添加异步,我尽量不改变太多。

使用 Parallel ForEach 迭代并删除每次循环迭代中的 await 调用。

        private IEnumerable<string> translateData(string[] Collection)
        {
            //The resulting string collection.
            var resultCollection = new ConcurrentBag<string>();

            Dictionary dict = new Dictionary();

            Parallel.ForEach(Collection,
                value =>
                {
                    var person = dict.getNewValue(param1, param2, value.Substring(0, 10));
                    value.Remove(0, 10);
                    resultCollection.Add(person.Property1 + value);
                });

            return resultCollection;
        }

您的尝试和平行度不正确。如果每次向翻译发送并行请求时都停止当前迭代并等待结果(不继续循环),那么您什么也没做。

希望对您有所帮助!