gpt4 book ai didi

c# - Azure AppendBlob 的属性 AppendBlobCommissedBlockCount 为 null

转载 作者:行者123 更新时间:2023-12-03 04:28:19 25 4
gpt4 key购买 nike

我正在(使用.NET)写入一个 azure 的AppendBlob,并且我想在向其附加任何内容之前检查是否已达到允许附加的最大块数。 I have read该限制是 50k,所以我将使用该数字。为此我正在尝试这个

public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
{
foreach (var message in messages)
{
try
{
if (_appendBlob.Properties.AppendBlobCommittedBlockCount == _maximumBlockNumberPerBlob)
{
CreateBlob(null);
}
ProcessMessage(message);
}
catch (Exception ex)
{
_log.Error("Failed Processing Message", ex);
}
}

await context.CheckpointAsync();
}

但是 AppendBlobCommissedBlockCount 始终为 null,而 CreateBlob 方法只是创建一个新的 blob(它采用可疑的 null 参数,因为我也使用 Timer class 来调用它)。任何想法为什么会发生这种情况,或者如果不是这样的话我该如何检查?

谢谢

更新:

CreateBlob方法如下:

public void CreateBlob(object _)
{
var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccount"));
var appendBlobReference = CloudConfigurationManager.GetSetting("appendBlobReference");
var blobClient = storageAccount.CreateCloudBlobClient();
var currentDate = DateTime.UtcNow;
var container = blobClient.GetContainerReferenc("testContainer");
container.CreateIfNotExists();
_appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}");
_appendBlob.CreateOrReplace();
}

作为 _appendBlob 私有(private)字段,folderName 和appendBlobReference 只是字符串

所有这些方法都位于实现 IEventProcessor 的类中因为它用于从 EventHub 获取事件,所以基本上当流中有新内容时会调用 Task ProcessEventAsync。

此外,我第一次调用 CreateBlob 是在该类的构造函数内,该类使用计时器实现 IEventProcessor(因为我将每 15 分钟创建一个新的计时器,无论它是否已满)。这一点有效

_timer = new Timer(CreateBlob, null, TimeSpan.FromMilliseconds(0), TimeSpan.FromMinutes(int.Parse(CloudConfigurationManager.GetSetting("updateBlobNameIntervalInMinutes"))));

以及创作

最佳答案

我刚刚尝试使用 CloudAppendBlob.CreateOrReplace 创建追加 blob,我注意到这不会返回 AppendBlobCommissedBlockCount ,这就是为什么此属性的值保持为 null(默认值)。

要填充此值,您需要再次获取 blob 的属性。请在创建 blob 后添加以下代码行,您应该会在其中看到一个非空值:

        _appendBlob.FetchAttributes();

所以你的代码是:

_appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}");
_appendBlob.CreateOrReplace();
_appendBlob.FetchAttributes();

关于c# - Azure AppendBlob 的属性 AppendBlobCommissedBlockCount 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40294111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com