Использование деструктора для вызова асинхронного веб-задания - PullRequest
0 голосов
/ 07 февраля 2019

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

Когда экземпляр класса завершен (обычно, когда форма закрыта), я хочу, чтобы он автоматически запускал веб-задание, которое обрабатывает (zips).и так далее) фотографии.Я не хочу, чтобы веб-работа запускалась при каждом добавлении фотографии.Я также хотел бы не требовать, чтобы вызывающий код явно вызывал метод в классе обработки фотографий, который запускает веб-работу - хотя вы можете сказать мне, что это правильный способ сделать это.

ДокументацияЯ прочитал, указывает, что деструктор предназначен для освобождения ресурсов, но может ли он также использоваться для вызова определенных задач, которые вы хотите выполнить после того, как объект больше не нужен?

Вот основная идея:

public class DoSomething
    {

    DoSomething()
    {
        //initialize
    }

    public void DoTheActualThing()
    {
        //Upload photos to cloud as needed
    }

    ~DoSomething()
    {
        //Call Async web job to process photos into zip
        PostImageSyncDate(_SyncPhotoData)
    }

}

// Асинхронный метод в отдельном классе обслуживания

    public async Task<bool> PostImageSyncData(ProjectModel syncPhotosData)//, JObject token = null)
    {
        try
        {

            string serializedData = JsonConvert.SerializeObject(syncPhotosData);
            StringContent content = new StringContent(serializedData, Encoding.UTF8, "application/json");

            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(_URL);
                var response = await client.PostAsync("CustomImageSync", content);
                return response.IsSuccessStatusCode;
            }

        }
        catch (Exception ex)
        {
            if (ex == null) throw;
            return false;
        }
    }
...