作者:手机用户2602879695 | 来源:互联网 | 2023-09-09 15:57
我有一个数据表(25k行x 50列)。我需要为每个单元使用一个API,并使用API的返回值修改该单元的值。在一个线程中执行此操作花费的时间太长,因此我在考虑使用更多线程。
我无法成功完成此操作。我尝试了并行。 Foreach不起作用,因为我在里面等着。
这是我最后的尝试。
var columns = a.Columns.Count;
List tasks = new List();
foreach (DataRow row in a.Rows)
{
tasks.Add(Task.Run(() => DoLotsofWorkAsync(row,columns)));
}
await Task.WhenAll(tasks);
方法:
public async Task DoLotsofWorkAsync(DataRow row,int colCount)
{
var columns = colCount;
int i = 0;
string ab = "";
while (i {
if (row[i].ToString() != "")
{
row.BeginEdit();
try
{
string currentString = row[i].ToString();
Maybe failedResults;
var fromLanguageExtension = await _languageDetector.DetectLanguage(currentString);
var results = await GetMeansFromCache(currentString,fromLanguageExtension);
var findedMeans = await _resultOrganizer.OrganizeResult(results,currentString,out failedResults)
.ConfigureAwait(false);
if (!string.IsnullOrEmpty(findedMeans.DefaultIfEmpty(string.Empty).First()))
{
ab = findedMeans.DefaultIfEmpty(string.Empty).First().ToString();
}
row[i] = ab;
//await Notify(currentString,findedMeans);
}
catch (Exception ex)
{
await Notify("Error",new Maybe(ex.Message));
}
row.EndEdit();
}
i++;
}
}
我不确定自己在做什么错。有人可以指出我正确的方向吗?
谢谢!