C# 再次运行出现故障的任务

C# 再次运行出现故障的任务,c#,.net,.net-core,task-parallel-library,C#,.net,.net Core,Task Parallel Library,我正在运行一项任务,该任务应持续工作 我有一个while(true)循环,应该检查此任务是否已结束。当它结束时,我想再次运行它 当它抛出异常或任务因出现故障或已完成而结束时,我该怎么办 var task=task.Run(异步()=> { while(true) { //做点什么 } }); while(true) { if(task.IsFaulted) { //做点什么 } 如果(任务已完成) { //做点什么 } } 为什么不做以下事情: var task

我正在运行一项任务,该任务应持续工作

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

当它抛出异常或任务因
出现故障
已完成而结束时,我该怎么办

var task=task.Run(异步()=>
{                
while(true)
{
//做点什么
}
});
while(true)
{
if(task.IsFaulted)
{
//做点什么
}
如果(任务已完成)
{
//做点什么
}
}

为什么不做以下事情:

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();
}
//删除
Func createDoSomethingTask=()=>Task.Run(()=>
{
//做点什么
});
//---创建任务
Task doSomethingTask=createDoSomethingTask();
//---在另一个地方,您可以检查状态,若任务应该重新运行,则使用委托
if(doSomethingTask.IsFaulted)
{
doSomethingTask=createDoSomethingTask();
}

我有一些任务,有些是While(connection==true),因此可以结束这些任务。我想在一个地方得到支持。@mdlejtecole有什么问题?在可以结束的任务中,设置该条件。什么都没有停止you@mdlejtecole任务不是线程。它们不会像线程一样启动和停止。事实上,线程本身无法重新启动,所以这是保持任务活动的唯一方法吗?最后,我将任务添加到方法中,并再次运行此方法。我认为这对我的程序来说是更好的解决方案。一个任务不能再次运行,它代表一次执行。任务是一种承诺,即某物将在未来完成并可能返回某物。在任何情况下,
启动
如何处理IO操作返回的任务?那个里并没有线程。谢谢你们的回复,最后我把任务放在方法中,并再次使用这个方法。我不喜欢在同一个班里用委托的方法。