С#. Можно ли прервать задачу удалив объект с методом который её создал?

172
02 февраля 2020, 13:30

Есть примерно такой простой код:

SomeClass _someClassObject;
public async void UpMethod()
{
    _someClassObject = new SomeClass();
    // этот метод возвращает Task<SomeResultClass>
    var task = _someClassObject.SomeMethodAsync(/*параметры*/); 
    var result = await task; // ждёмс...
    var r1 = result.r1;
    var r2 = result.r2;
}

Пользователь нажимает кнопочку и вызывается UpMethod() он долгий... и даже несколько зависящий от действий пользователя. И тут пользователь решает отменить действия которые выполняются внутри задачи. Он нажимет на кнопочку Отмена и вызывается метод Cancel()

public void Cancel(){
    _someClassObject = null;// вот тут и вопрос
}

От этого действия задача отменится?

Answer 1

В официальном мануле по моему написано, что корректно отменять Task можно 2-мя путями:

  1. Через return
  2. CancellationToken

Если бы его можно было отменить простым присвоением, то там бы так и написали.

А вообще, как вы себе это представляете? Откуда среда должна знать, как правильно выполнить завершение задачи, если вы сами об этом не позаботитесь? Если она тупо убьет задачу, то программа может остаться в непонятном состоянии, так как она могла работать с какими-то внешними данными.

READ ALSO
Не могу понять почему через некоторое время не работает контекстное меню

Не могу понять почему через некоторое время не работает контекстное меню

Написал приложение, которое мониторит папку, если файл есть, то копирует его в другую папку, но с нужным именемЭто в кратце

181
Как проверить является ли символ числом?

Как проверить является ли символ числом?

Как можно проверить,является ли определенный символ в строке числом? Не смог найти никакой рабочей информации, Parse не работает

210
Под значимые переменные в классе память выделяется в куче?

Под значимые переменные в классе память выделяется в куче?

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

174
Одновременное чтение и запись в файл

Одновременное чтение и запись в файл

Пишу клиент-сервер, где один клиент пишет в файл, а другие клиенты просматривают измененияХочу достичь чего-то вроде Google Document

156