我的问题与下面的问题相似。
有关连续 Azure Web 作业何时停止的通知 NoAutomaticTrigger 类型作业
我使用了Amit博客中的想法,但后来遇到了一个小障碍
我在 Web 作业中设置了一个文件观察程序,如果 Web 作业从门户关闭,则会触发该文件观察程序。
在终止 Web 作业之前,我需要更新存储表中的一些标志。
问题是我的代码似乎在我尝试从存储表中检索记录的点停止。我在下面的代码周围有异常处理程序,并且控制台上没有编写异常消息。
下面是我的代码
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("my storage key");
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference("myTable");
TableOperation operation = TableOperation.Retrieve("partKey", "rowKey");
var result = table.Execute(operation); // stucks here
if (result.Result != null)
{
MyEntity entity = (MyEntity)result.Result;
if (entity != null)
{
entity.IsRunning = false; //reset the flag
TableOperation update = TableOperation.InsertOrReplace(entity);
table.Execute(update); //update the record
}
}
我已经在settings.job
内将stopping_wait_time
增加到 300 秒,但仍然没有运气。
您可以使用 Microsoft.Azure.WebJobs.WebJobsShutdownWatcher
这是 Amit 解决方案的实现:WebJobs Graceful Shutdown
所以我找到了这样做的解决方案:
程序没有修改.cs
class Program
{
static void Main()
{
var host = new JobHost();
host.Call(typeof(Startup).GetMethod("Start"));
host.RunAndBlock();
}
}
优雅的关闭进入您的函数:
public class Startup
{
[NoAutomaticTrigger]
public static void Start(TextWriter log)
{
var token = new Microsoft.Azure.WebJobs.WebJobsShutdownWatcher().Token;
//Shut down gracefully
while (!token.IsCancellationRequested)
{
// Do somethings
}
// This code will be executed once the webjob is going to shutdown
Console.Out.WriteLine("Webjob is shuting down")
}
}
在 while 循环之后,您还可以停止已启动的任务。