我有一个Azure功能,在消费计划中解压缩档案。其中一些恰好需要超过10分钟来解压缩并且可以超时。我正在考虑制定一个单独的应用服务计划,我会在消费计划超时时重新路由提取。
你会怎么做?功能中的计时器?捕获超时异常?你有更好的建议吗?
由于
答案 0 :(得分:3)
对于那些感兴趣的人,我结束了我自己的超时(比Azure一早几秒)添加到提取功能,然后重新路由到服务应用计划处理的另一个队列,而不是超时。
代码:
using (var timeoutCts = new CancellationTokenSource())
{
try
{
// task completed within timeout
timeoutCts.CancelAfter(590000);
var counter = await ExtractArchiveAsync(archiveFullName, myBlob, timeoutCts.Token);
log.Info($"Extracted : { counter.GetCurrentCount() }");
}
catch (OperationCanceledException)
{
// timeout logic
log.Info($"Function timedout, redirected to long queue");
var queue = StorageService.GetCloudQueueReference("ArchiveToExtractQueueTimedOut");
await queue.AddMessageAsync(new CloudQueueMessage(archiveFullName));
}
}