У меня есть функция, которая обрабатывает несколько HTTP-запросов и запускается в задаче. эта функция может быть прервана посередине, так как я не могу отменить задачу, я добавил некоторые логические условия в функцию. пример:Отмена функции
public int foo(ref bool cancel)
{
if(cancel)
{
return null
}
//do some work...
if(cancel)
{
return null
}
//http webrequest
if(cancel)
{
return null
}
}
thisworked довольно хорошо, хотя это совсем немного некрасиво код.
Другая проблема в том, что я уже выполнил веб-запрос, и мне требуется время, чтобы получить ответ, чем функция cncelation занимает много времени (пока я не получу ответ).
есть ли лучший способ проверить это? или mybe я должен использовать потоки вместо задачи?
редактировать
я добавил от отказа фишку: объявлен cancelationTokenSource, и передал его фишку к задаче
CancellationTokenSource cncelToken = new CancellationTokenSource();
Task t = new Task(() => {foo()},cancelToken.token);
когда я делаю cancelToken.Cancel(); Я все еще жду ответа, и tsk не отменяет.
Какой чудесный полный и хорошо объясненный ответ! – RMalke
, но его симулятор к моему решению. только thins заключается в том, что моя задача вызывает функцию, и эта функция не знает токена отмены. я все равно должен проверить, требуется ли отмена. я могу использовать токен cncelation, но мне все равно придется ждать ответа, чтобы вернуться. Я хочу отменить его до этого. – alostr
Не совсем - необходимость опроса на токене отмены - только если у вас есть очистка для выполнения. Если нет никакой очистки, задача будет молча прекратить выполнение вашего кода. – Ani