我在我的应用中使用async
方法获得了以下代码
b_saving = true;
while (b_saving == true)
{
try
{
if (1 == 1)
b_saving = false;
// anything down here should not execute?
i_should_not_run();
}
catch{
}
finally{
}
}
我对此代码的期望是,只要b_saving设置为false,它就会停止。然而,当我运行它时,情况并非如此。断点显示即使b_saving为false,该方法也会继续。
while循环在C#中不能以这种方式工作吗?
答案 0 :(得分:2)
即使将b_saving
设置为false,循环仍将继续,除非您在其中放置break
命令,while循环将继续执行,直到其块结束,然后才重新启动评估条件,在这种情况下,最有可能避免循环的另一次迭代,除非您在b_saving
方法中将i_should_not_run
设置为true。
PS你可以在while中写一个更简单的条件,不需要把== ...
while (b_saving)
答案 1 :(得分:0)
b_saving = true;
while (b_saving == true)
{
try
{
bool stop = true;
if (stop == true)
{
b_saving = false;
break;
}
// anything down here should not execute?
i_should_not_run();
}
catch{
}
finally{
}
}
答案 2 :(得分:0)
它将继续运行代码,直到执行While
检查。
如果你想提前摆脱循环,那么你需要一个break;
语句。
答案 3 :(得分:0)
您需要使用break
来停止执行,如下所示
b_saving = true;
while (b_saving == true)
{
try
{
if (1 == 1){
b_saving = false;
break; // Will exit the loop
}
// anything down here should not execute?
i_should_not_run();
}
catch{
}
finally{
}
}
Read:
break语句终止它出现的最近的封闭循环或switch语句。控制权将传递给终止语句后面的语句(如果有)。
答案 4 :(得分:0)
为了让while循环停止而不继续执行该方法,你的if语句应该是这样的:
if(1 == 1)
{
b_saving = false;
break;
}
break关键字将退出循环。
答案 5 :(得分:0)
这与async或try / catch无关。
将b_saving
设置为false只是故事的一部分 - 在您实际测试其值并根据采取行动之前,它只有效果(在这种情况下退出{{ 1}}循环)。
这是循环始终运行的方式。
您可能也会从编译器中获得有趣的结果(取决于语言) - 某些代码可能会被删除,因为它实际上是无用的。
答案 6 :(得分:0)
此循环应该首次执行b_saving == true
一次。在循环内,您将b_saving
设置为false,这样它就不会再次执行。
要阻止调用i_should_not_run
,请添加break
语句。
答案 7 :(得分:0)
几点:
只是一个需要考虑的模板
为{;;} { 尝试 { 如果(hasToStop) { 打破; } } catch {hasToStop = true;} }