Обновлять таблицы хранилища при завершении работы веб-задания

Мой вопрос аналогичен приведенному ниже.

Уведомление о остановке непрерывного веб-задания Azure для заданий типа NoAutomaticTrigger

Я использовал идею из блога Амита. но затем попал в небольшой контрольно-пропускной пункт

У меня есть наблюдатель за файлами, установленный в веб-задании, который срабатывает, если веб-задание закрывается с портала.

Мне нужно обновить несколько флагов в моих таблицах хранилища, прежде чем веб-задание будет завершено.

Проблема в том, что мой код останавливается в точке, где я пытаюсь извлечь запись из таблицы хранения. У меня есть обработчик исключений вокруг приведенного ниже кода, и на консоли не записывается сообщение об исключении.

Ниже мой код

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
         }
     }

Я увеличил stopping_wait_time в settings.job до 300 секунд, но все равно не повезло.


person Sandesh    schedule 17.04.2015    source источник


Ответы (1)


Вы можете использовать Microsoft. Azure.WebJobs.WebJobsShutdownWatcher
Это реализация решения Amit: Мягкое завершение работы веб-заданий

Итак, я нашел решение:
без изменений в Program.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 вы также можете остановить запущенные задачи.

person Thomas    schedule 15.12.2015