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;
}
您的尝试和平行度不正确。如果每次向翻译发送并行请求时都停止当前迭代并等待结果(不继续循环),那么您什么也没做。
希望对您有所帮助!
我感到非常困惑...我正在尝试实现对 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;
}
您的尝试和平行度不正确。如果每次向翻译发送并行请求时都停止当前迭代并等待结果(不继续循环),那么您什么也没做。
希望对您有所帮助!