Мне нужен способ установить async-задачу как долгое время без использования Task.Factory.StartNew(...) и вместо этого использовать Task.Run(...) или что-то подобное.
Context:
У меня есть Task, которая непрерывно циклически, пока она не будет отменена извне, которую я хотел бы установить как "длинный" (т.е. дать ему выделенный поток). Это может быть достигнуто с помощью приведенного ниже кода:
var cts = new CancellationTokenSource();
Task t = Task.Factory.StartNew(
async () => {
while (true)
{
cts.Token.ThrowIfCancellationRequested();
try
{
"Running...".Dump();
await Task.Delay(500, cts.Token);
}
catch (TaskCanceledException ex) { }
} }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
Проблема заключается в том, что Task.Factory.StartNew(...) не возвращает активную задачу async, которая передается, а скорее "задача запуска Action", которая функционально всегда имеет taskStatus из "RanToCompletion". Поскольку мой код должен отслеживать статус задачи, чтобы увидеть, когда он станет "Отменен" (или "Неисправность" ), мне нужно использовать что-то вроде ниже:
var cts = new CancellationTokenSource();
Task t = Task.Run(
async () => {
while (true)
{
cts.Token.ThrowIfCancellationRequested();
try
{
"Running...".Dump();
await Task.Delay(500, cts.Token);
}
catch (TaskCanceledException ex) { }
} }, cts.Token);
Task.Run(...), по желанию, возвращает сам процесс async, позволяющий мне получать фактические статусы "Отменено" или "Неисправность". Однако я не могу указать задачу как долгое время. Итак, кто-нибудь знает, как лучше всего запускать асинхронную задачу, одновременно сохраняя эту активную задачу (с нужным taskStatus) и долгое выполнение задачи?