循环azure函数(Blob触发器)

循环azure函数(Blob触发器),azure,azure-storage-blobs,azure-functions,Azure,Azure Storage Blobs,Azure Functions,我有Azure函数:blob触发器。 在指定文件夹中添加或更改blob时,函数会更改此blob 但有一个问题。通过函数更改blob后,它将再次启动以处理已更改的blob。再说一遍。因此,功能循环 如何防止功能循环 如何防止功能循环 一种方法是存储修改过的blob的ETag,并在修改blob之前比较ETag。如果ETag已经存在,则表示blob刚刚被修改。我们不需要用这个斑点做任何事情。以下代码仅供参考 public static void ProcessBlob([BlobTrigger("my

我有Azure函数:blob触发器。 在指定文件夹中添加或更改blob时,函数会更改此blob

但有一个问题。通过函数更改blob后,它将再次启动以处理已更改的blob。再说一遍。因此,功能循环

如何防止功能循环

如何防止功能循环

一种方法是存储修改过的blob的ETag,并在修改blob之前比较ETag。如果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>();
publicstaticvoidprocessblob([BlobTrigger(“mycontainer/{name}”)]CloudBlockBlob blob,字符串名)
{
Console.WriteLine(“检查前:+blob.Properties.ETag”);
if(CheckETagExists(blob.Properties.ETag))
{
//无所事事
}
其他的
{
//修改此blob
//...
//修改此blob后,将此blob的ETag保存到一个位置。
blob.UploadText(“abcdefg”);
SaveETag(blob.Properties.ETag);
Console.WriteLine(“保存:”+blob.Properties.ETag);
}
}
公共静态bool CheckETagExists(字符串etag)
{
返回ModifiedBlobETags.Contains(etag);
}
公共静态void SaveETag(字符串etag)
{
ModifiedBlobETags.Add(etag);
}
public static List ModifiedBlobETags=new List();

该示例将etag保存到内存以进行测试,我建议您将etag保存到持久化文件或Azure表服务以用于您的函数

只需大声思考,就可以将更改后的blob写入另一个容器。