2017-06-27 52 views
0

我有Azure函數:blob觸發器。 當我在指定的文件夾中添加或更改blob時,函數會更改此blob。循環azure函數(Blob觸發器)

但有一個問題。通過函數更改blob後,它會再次啓動以處理已更改的blob。然後再一次。因此,功能循環。

我該怎麼做才能防止循環功能?

+0

只要大聲想一想,就可以將更改後的blob寫入另一個容器。 –

回答

0

我該怎麼做才能防止循環功能?

一種方法是在修改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中的服務爲您的功能。