0
我有Azure函數:blob觸發器。 當我在指定的文件夾中添加或更改blob時,函數會更改此blob。循環azure函數(Blob觸發器)
但有一個問題。通過函數更改blob後,它會再次啓動以處理已更改的blob。然後再一次。因此,功能循環。
我該怎麼做才能防止循環功能?
我有Azure函數:blob觸發器。 當我在指定的文件夾中添加或更改blob時,函數會更改此blob。循環azure函數(Blob觸發器)
但有一個問題。通過函數更改blob後,它會再次啓動以處理已更改的blob。然後再一次。因此,功能循環。
我該怎麼做才能防止循環功能?
我該怎麼做才能防止循環功能?
一種方法是在修改blob之前存儲修改後斑點的ETag並比較ETag。如果ETag已經存在,則表示該blob剛剛被修改。我們不需要任何這個blob。以下代碼供您參考。
public static void ProcessBlob([BlobTrigger("mycontainer/{name}")] CloudBlockBlob blob, string name)
{
Console.WriteLine("before check:" + blob.Properties.ETag);
if (CheckETagExists(blob.Properties.ETag))
{
//Do nothing
}
else
{
//Modify this blob
//...
//After modified this blob, save the ETag of this blob to a place.
blob.UploadText("abcdefg");
SaveETag(blob.Properties.ETag);
Console.WriteLine("Save:" + blob.Properties.ETag);
}
}
public static bool CheckETagExists(string etag)
{
return ModifiedBlobETags.Contains(etag);
}
public static void SaveETag(string etag)
{
ModifiedBlobETags.Add(etag);
}
public static List<string> ModifiedBlobETags = new List<string>();
的樣品的ETag保存到內存中以便測試的目的,我建議你保存的ETag堅持文件或Azure Table中的服務爲您的功能。
只要大聲想一想,就可以將更改後的blob寫入另一個容器。 –