运行 再次出现故障的任务
Run again Task which isFaulted
我正在 运行 执行一项任务,该任务应该持续进行。
我有一个 while(true) 循环,它应该检查这个任务是否已经结束。当它结束时,我想再次 运行 它。
由于IsFaulted
或IsCompleted
而抛出异常或任务结束时我该怎么办?
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();
}
我正在 运行 执行一项任务,该任务应该持续进行。
我有一个 while(true) 循环,它应该检查这个任务是否已经结束。当它结束时,我想再次 运行 它。
由于IsFaulted
或IsCompleted
而抛出异常或任务结束时我该怎么办?
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();
}