如何在没有(409)冲突的情况下附加到Azure存储帐户(Gen2)AppendBlob

时间:2020-10-05 21:25:23

标签: c# .net azure-storage-blobs azure-data-lake-gen2

我有一个方法,它接受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个冲突?

如果需要在此处提供其他信息,请告诉我。

预先感谢

0 个答案:

没有答案