c# - 天蓝色函数中的并行 Foreach
问题描述
我的目标是在容器中观察新的 zip blob,然后在 az 函数中解压缩文件,将解压缩的文件推回不同的 az blob 容器中。我已在应用服务计划 az 函数中部署了我的代码。我用它作为我的起始基地 http://www.frankysnotes.com/2019/02/how-to-unzip-automatically-your-files.html?m=1
我将下面的每个转换为具有最大 4 个线程的 parallel.foreach,在带有存储模拟器的 vscode 上本地工作得很好。当我部署它时,它根本不运行 parrell.foreach 部分。
[FunctionName("Unzipthis")]
public static async Task Run([BlobTrigger("input-files/{name}", Connection = "cloud5mins_storage")]CloudBlockBlob myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}");
string destinationStorage = Environment.GetEnvironmentVariable("destinationStorage");
string destinationContainer = Environment.GetEnvironmentVariable("destinationContainer");
try{
if(name.Split('.').Last().ToLower() == "zip"){
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(destinationStorage);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(destinationContainer);
using(MemoryStream blobMemStream = new MemoryStream()){
await myBlob.DownloadToStreamAsync(blobMemStream);
using(ZipArchive archive = new ZipArchive(blobMemStream))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
log.LogInformation($"Now processing {entry.FullName}");
//Replace all NO digits, letters, or "-" by a "-" Azure storage is specific on valid characters
string valideName = Regex.Replace(entry.Name,@"[^a-zA-Z0-9\-]","-").ToLower();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(valideName);
using (var fileStream = entry.Open())
{
await blockBlob.UploadFromStreamAsync(fileStream);
}
}
}
}
}
}
catch(Exception ex){
log.LogInformation($"Error! Something went wrong: {ex.Message}");
}
}
解决方案
推荐阅读
- python - praw reddit 库:可以创建非自定义报告吗?
- java - FileDialog 在 JFX 应用程序中挂在 Mac OS 上
- javascript - 我无法理解拖放示例中的计算
- python - Can you use a regular expression in a Django template conditional?
- python - 如何解决 PyGSLIB 库安装错误?
- javascript - 从 JQuery 响应创建字典/对象
- blockchain - 如何使用 Web3 发送 Ether 并从另一个地址支付 Gas 费?
- linux - ARM 程序集加载字符串会产生奇怪的终端输出
- python - 验证它是否是字符串 python
- python - 多处理池的python保存数据在linux上没有给出预期的结果