运行 再次出现故障的任务

Run again Task which isFaulted

我正在 运行 执行一项任务,该任务应该持续进行。

我有一个 while(true) 循环,它应该检查这个任务是否已经结束。当它结束时,我想再次 运行 它。

由于IsFaultedIsCompleted而抛出异常或任务结束时我该怎么办?

var task = Task.Run(async () =>
{                
    while (true)
    {
        //do something
    }
});

while (true)
{
    if(task.IsFaulted)
    {
        //Do something
    }
    if (task.IsCompleted)
    {
        //Do something
    }
}

为什么不这样做:

var task = Task.Run(async () =>
{
    while (true) // Infinite retries
    {
        try
        {
            // Do something
        }
        catch (Exception e)
        {
            // Log the exception, but swallow it, so we retry
        }
    }
});

您可以创建一个创建任务的委托并 运行 它。然后在 task.IsFaulted 的情况下,您可以通过委托创建另一个任务。还应实现当前任务实例和委托之间的一些映射。几行伪代码:

// deletgate
Func<Task> createDoSomethingTask = () => Task.Run(() =>
{
    // do something
});

// --- create task
Task doSomethingTask = createDoSomethingTask();

// --- in other place you can check status, if task should be re-run, then use delegate
if (doSomethingTask.IsFaulted)
{
    doSomethingTask = createDoSomethingTask();
}