.NET多线程等待不等待异步

时间:2014-06-24 11:31:01

标签: .net multithreading asynchronous async-await

我在使用await和async的.NET Framework 4.5中遇到多线程问题。

这是代码。

List<Task<string>> t = new List<Task<string>>(); 
for (Row = 0; Row < lines.Count; Row++)
{        
  if (Row != 0 && lines[Row].Length >= CCColumnToken && lines[Row][CCColumnToken] != "")
  {
    t.Add(AccessPaymentVault(Row, credentials, cts.Token));
  }
}
string[] str_list = await Task.WhenAll(t.ToArray());

在下面的异步函数中,似乎执行了Tokenization.Retrive。但在检索数据之前,whenAll完成并保存数据。

async Task<string> AccessPaymentVault(int row, Credentials credentials, CancellationToken ct){
    var data = await Task.Factory.StartNew(() =>
    {
      return Tokenization.Retrieve(credentials, lines[row][CCColumnToken]);
    }, ct);
    var returnData = Encryptor.Decrypt(data);
    if (returnData != null)
    {
        JObject obj = JObject.Parse(returnData);
        lines[row][CCColumnNum] = (string)obj["cardNo"];
        lines[row][CCColumnExpiry] = (new DateTime(Int32.Parse((string)obj["expiryYYYY"]), Int32.Parse((string)obj["expiryMM"]), 1)).ToString("MM/yy");
    }
    return returnData;
}

有时代码效果很好,但有时候我认为当所有代码都不起作用时,某些结果(随机)是空的。任何帮助将不胜感激。

谢谢。

0 个答案:

没有答案