Я создал метод, который обрабатывает несколько проверок перед запуском Задачи, переданной в качестве параметра.
Моя проблема заключается в том, что созданная там задача не ведет себя должным образом и быстро рассматривается как RanToCompletion, несмотря на то, что код все ещеrunning.
Вот пример:
public Task Main(CancellationToken localToken)
{
try
{
AddToTasker(new Task(async () => await ExtractAllOffer(localToken), localToken), TaskTypes.Extractor);
//this allows to extract only the task for the given task type through the list created in AddToTasker, actual code is not necessary the returned array is correct
Task.WaitAll(GetTasksArray(new TaskTypes[]{TaskTypes.Extractor}), localToken);
IsRunning = false;
}
}
public void AddToTasker(Task task, TaskTypes taskstype)
{
/*
* Whatever code to perform few check before starting the task
* among which referencing the task within a list which holds also the taskstype
*/
task.Start();
}
async private Task ExtractAllOffer(CancellationToken localToken)
{
// *** Do very long Stuff ***
}
Метод ExtractAllOffer представляет собой цикл с несколькими моментами, когда i await
завершается внешним кодом.На первом await
Task.WaiAll
завершается и переходит к IsRunning = false
Я проверил этот поток , но это не та проблема, с которой я правильно использую асинхронныйtask, а не async void.
Кроме того, код использовался для правильной работы до того, как я переместил выполнение Task в метод AddToTasker.Раньше я делал вот так AddToTasker(Task.Run(() => ExtractAllOffer(localToken), localToken), TaskTypes.Extractor);
, но я понял, что мне нужно выполнить проверки перед запуском Задачи, и мне нужно было учесть проверки внутри метода AddToTasker (у меня много вызовов этого метода).
Я вродеЯ понимаю, что в том, как я объявляю или запускаю свое задание, есть недостаток, но не могу понять, что.
Помощь, высоко оцененная