Я хочу создать объект, который выполняет какую-то работу, после того, как работа выполнена, и через некоторое время она разрушает себя. Я написал что-то, но не знаю, будет ли это работать так, как я хочу, чтобы это работало. Я использую структуру MVC в своем проекте. NET Core 2.1
Я создал класс:
public class DestroableBackroundWorker : IDestroableBackroundWorker
{
public int Quantity { get; set; }
public int Successful { get; set; }
public int Waiting { get; set; }
public int Unsuccessful { get; set; }
public bool Done { get; set; }
public string Output { get; set; }
public string ID { get; set; }
public DestroableBackroundWorker (string jsonobject, string ID)
{
this.ID = ID;
Task.Run(() => Working(jsonobject));
Task.Delay(3600000).ContinueWith(t => destroyme());
}
private void Working(string jsonobject)
{
try
{
//does work here, updates parameters of itself, to be able to see progress
Done = true;
Task.Delay(120000).ContinueWith(t => destroyme());
}
catch
{
Done = true;
Task.Delay(120000).ContinueWith(t => destroyme());
}
}
public void destroyme()
{
Project.Controllers.API.BackgroundUploads.Remove(this);
}
}
У меня также есть этот список в моем контроллере API:
public static List<IDestroableBackroundWorker> BackgroundUploads = new List<IDestroableBackroundWorker>();
Я инициирую объект из конечной точки API. Вот так:
string ID = Guid.NewGuid().ToString();
BackgroundUploads.Add(new DestroableBackroundWorker(info, ID));
return Json(ID);
Если я хочу проверить прогресс, я делаю это:
foreach (IDestroableBackroundWorker Worker in BackgroundUploads)
{
if (Worker.ID == ID) {
var Responce = new { All = Worker.Quantity, Success = Worker.successful, Unsuccess = Worker.unsuccessful };
return Json(Responce);
}
}
return Json(false);
Я хочу уничтожить этот объект, Через 2 минуты после выполнения работы или создания объекта через 1 час, будет ли это работать нормально? Я проверил, работает ли он по назначению, удаляется ли он из списка BackgroundUploads
. Я также заметил, что после того, как он удаляет себя из этого Списка, он все еще работает, если он еще не закончил.
Мой вопрос состоит из двух частей:
- это нормально? ?, если работа выполнена, а затем она удаляет себя из списка, этот объект исчез? Я имею в виду, не будет ли он использовать память или пространство?
- как удалить его, даже если он все еще выполняет какую-то работу, не удалить указатель, но сделать так, чтобы этот объект больше не занимал память, пространство, процессор, прекратил выполнять какую-либо работу и исчез.