达到超时后,我可以 运行 WebJob 中的一些代码吗?
Can I run some code in a WebJob after the timeout has been reached?
我有一个使用 ServiceBusTrigger 的连续 WebJob。我还设置了 10 分钟的超时。
如果函数在此之前完成,它会将响应发送到另一个队列。
但如果超时,它就会退出。达到超时时是否可以 运行 一些代码?就像一个回调函数。所以我可以发送一个进程超时的正确消息。
[Timeout("00:10:00")]
public static async Task ProcessPreflightQueueMessage([ServiceBusTrigger("%preflightQueue%")] string message, CancellationToken token, ILogger logger)
{ ... }
是的,你可以,当函数超时时,它会抛出 TaskCanceledException
,你可以抓住它并做你的事情。
这是我的测试。
public class Functions
{
[Timeout("00:00:30")]
public static async Task TimeoutJob(
[QueueTrigger("myqueue")] string message,
CancellationToken token,
TextWriter log)
{
try
{
await log.WriteLineAsync(message);
log.WriteLine($"-- [{DateTime.Now.ToString()}] Processing Begin --");
await Task.Delay(TimeSpan.FromMinutes(1), token);
log.WriteLine($"-- [{DateTime.Now.ToString()}] Complete Time-consuming jobs --");
}
catch (TaskCanceledException)
{
log.WriteLine("timeout");
}
log.WriteLine($"-- [{DateTime.Now.ToString()}] Processing End -- ");
}
}
我有一个使用 ServiceBusTrigger 的连续 WebJob。我还设置了 10 分钟的超时。 如果函数在此之前完成,它会将响应发送到另一个队列。
但如果超时,它就会退出。达到超时时是否可以 运行 一些代码?就像一个回调函数。所以我可以发送一个进程超时的正确消息。
[Timeout("00:10:00")]
public static async Task ProcessPreflightQueueMessage([ServiceBusTrigger("%preflightQueue%")] string message, CancellationToken token, ILogger logger)
{ ... }
是的,你可以,当函数超时时,它会抛出 TaskCanceledException
,你可以抓住它并做你的事情。
这是我的测试。
public class Functions
{
[Timeout("00:00:30")]
public static async Task TimeoutJob(
[QueueTrigger("myqueue")] string message,
CancellationToken token,
TextWriter log)
{
try
{
await log.WriteLineAsync(message);
log.WriteLine($"-- [{DateTime.Now.ToString()}] Processing Begin --");
await Task.Delay(TimeSpan.FromMinutes(1), token);
log.WriteLine($"-- [{DateTime.Now.ToString()}] Complete Time-consuming jobs --");
}
catch (TaskCanceledException)
{
log.WriteLine("timeout");
}
log.WriteLine($"-- [{DateTime.Now.ToString()}] Processing End -- ");
}
}