【发布时间】:2015-05-18 18:06:17
【问题描述】:
以下代码显示了我如何从 azure blob 存储下载 blob 并将它们保存到 DataTable 中:
foreach (var currIndexGroup in blobsGroupedByIndex)
{
DataRow dr = dtResult.NewRow();
foreach (var currIndex in currIndexGroup)
{
long fileByteLength = currIndex.Properties.Length;
byte[] serializedAndCompressedResult = new byte[fileByteLength];
currIndex.DownloadToByteArray(serializedAndCompressedResult, 0);
dr[currIndex.Metadata["columnName"]] = DeflateStream.UncompressString(serializedAndCompressedResult);
}
dtResult.Rows.Add(dr);
}
问题是,下载速度很慢。下载 1000 个真正的小 Blob 大约需要 20 秒。如果我尝试使用currIndex.DownloadToByteArrayAsync(serializedAndCompressedResult, 0); 异步运行它,后续行会抛出异常Bad state (invalid stored block lengths)。
异步填充这个数据表的正确方法是什么?
【问题讨论】:
-
你能用
DownloadToByteArrayAsync添加你的代码吗? -
这是相同的代码,但使用的是 DownloadToByteArrayAsync 而不是 DownloadToByteArray。我猜它不起作用,因为后续行在执行时没有填充 serializedAndCompressedResult 。但是不知道怎么解决。
-
你知道
DataTable不是线程安全的吗?为什么不使用ConcurrentDictionary?
标签: c# azure asynchronous datatable