我有一个方法,它接受blob目录和需要逐行读取并附加到Azure AppendBlob的文本存储流。我的存储帐户是启用了Data Lake Gen 2的通用v2(标准/热层)。 目前,由于没有409冲突错误,因此我无法追加到blob,即使没有其他用户正在写入此容器。
下面给出的是我的代码的简化版本(为简单起见),存在相同的问题: 请注意,该代码是为.net 4.6编写的:
/* the following libraries are in use
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
*/
static void WriteCSV(
Stream csvStream,
CloudBlobContainer tgtContaine // this is a Gen 2 container
)
{
csvStream.Position = 0;
using (StreamReader sr = new StreamReader(csvStream))
{
string csvFileName = "test-append-blob" + $@"_{DateTime.Now.ToString("yyyy-MM-ddTHHmmss")}.csv";
CloudAppendBlob blobCSVFile = tgtContaine.GetAppendBlobReference("iso/dwh/" + csvFileName); // need to create this in this directory
if (!blobCSVFile.Exists()) blobCSVFile.CreateOrReplace(); // at this point I can see the empty file being created
while (sr.Peek() >= 0)
{
string csvLine = sr.ReadLine();
// some additional logic ommited for brevity
blobCSVFile.AppendText(csvLine); // 409 conflict occures here !!!
}
}
}
我使用append blob并逐行写入的原因有很多,其中之一就是大量流内容和相关内存问题的潜在机会。
能否请您以正确的方法指导我实现这一目标?当没有其他处理器或会话正在使用此容器/目录时,为什么这里会有409个冲突?
如果需要在此处提供其他信息,请告诉我。
预先感谢