2017-06-27 6 views
0

私はAzure関数:blob-triggerを持っています。 指定したフォルダ内のblobを追加または変更すると、このblobが変更されます。サイクルアズール関数(Blob-trigger)

しかし、1つの問題があります。関数によってブロブを変更した後は、すでに変更されたブロブを処理するために再び起動します。また。したがって、関数は繰り返されます。

私の機能はサイクリングを防ぐために何ができますか?

+0

大声で考えてみると、変更されたBLOBを別のコンテナに書き込むことができます。 –

答えて

0

私の機能はサイクリングを防ぐために何ができますか?

修正されたblobのETagを格納し、blobを変更する前にETagを比較する方法の1つです。 ETagが既に存在する場合は、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を、私はあなたがあなたの関数のためにファイルやAzureテーブルサービスを永続化するためてETagを保存示唆しています。