【发布时间】:2023-03-16 06:19:01
【问题描述】:
我正在使用 ContinueWith 函数处理 C# 的 TaskFactory。这个问题正在尝试解决它
- 执行 Foo()。
- 如果结果成功,退出
- 如果 Foo() 没有成功,则迭代并执行 Foo() 直到成功(最大迭代 3 次)
- 如果3次迭代都不成功,放弃
我开始的代码是这样的
var executeTask = Task.Factory.StartNew<ExecutionStatus>(() =>
{
return Foo();
});
executeTask.ContinueWith(task => CheckIfExecutionWasSuccessful(task)).
ContinueWith(task => CheckIfExecutionWasSuccessful(task)).
ContinueWith(task => CheckIfExecutionWasSuccessful(task)).
ContinueWith(task => CheckLastTimeBeforeGivingUp(task));
Foo() 和 CheckIfExecutionWasSuccessful() 看起来像这样
ExecutionStatus Foo(){
//Do my work
return new ExecutionStatus(){Succeded = true}
}
ExecutionStatus CheckIfExecutionWasSuccessful(Task<ExecutionStatus> task){
if(task.Result.Succeeded) return task.Result;
else return Foo()
有些事情告诉我,这不是解决这个问题的最佳方法。有什么建议和想法吗?
【问题讨论】:
-
你在使用 >=.net45 吗?如果是这样,你真的应该去
async/await而不是使用.ContinueWith。 -
我们在 .NET 4.0 上,我没有将其更改为 4.5 的奢侈。不过我很好奇,如果我使用 async/await,我会怎么做
-
你可以使用一个简单的循环和 async/await
-
基本上,您的问题是使用两年前的技术解决的问题。您的代码会大大简化。
标签: c# task-parallel-library task