我已经读过,建议等待不要阻塞调用线程的Task.Delay()(因为选择了Task.Delay().Wait()和Thread.Sleep()).但随着我对async/await的了解越来越多,我感觉它所做的就是将等待任务转移到另一个线程上执行.
所以,我是否理解正确:await Task.Delay()不会阻塞调用线程,但是它会阻塞某个线程,等待任务转移到哪个线程?
如果该语句为TRUE,那么你可以告诉我一个方法,要求一个任务等待一段时间没有在等待期间阻塞任何线程吗?
我们最近开始在我们的引擎中遇到无限循环,我不知道如何有效地对抗它们.该应用程序只是冻结永恒,我无法阻止它的执行,以了解正在发生的事情.在主要位置放置正常断点(更新循环)什么都不做.我几乎可以肯定问题是在一个连续运行的循环中,但是由于代码的大小,我甚至无法开始猜测在哪里寻找它.
所以,我的问题是你如何在代码中的某个任意位置破坏应用程序在Visual Studio中的执行,那时应用程序正好在那个时候?类似于"留在你身边"的东西.它在理论上是否可能?
虽然这个问题乍一看可能听起来很愚蠢,但请听我说.
c#的get {}和set {}方法在你不知道编译目标在构建代码时如何发展的情况下是非常有用的.我很享受他们的自由很多次,现在我想知道是否有类似的方法,但有点不同的光.
当我在gamedev中工作时,日常扩展/更新/改进现有代码是一种非常常见的做法.因此,我自学的一种模式是在我的大部分方法中不要多次使用"返回"语句.
我这样做的原因是总是能够在方法的底部写一些东西,并确保一旦我的方法结束,我写的行总是100%被调用.
这是一个例子:
public void Update()
{
UpdateMovement();
if (IsIncapacitated)
return;
if (IsInventoryOpened)
{
UpdateInventory();
return;
}
if (Input.HasAction(Actions.Fire))
{
Fire();
return;
}
else if (Input.HasAction(Actions.Move))
{
Move(Input.Axis);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
现在想象一下,在整个项目的许多地方都会调用这种方法几十次.然后第二天你决定需要在Update()方法的最后调用UpdatePhysics()方法.在这种情况下,只有4个回报,实际上可能会更糟.
然后想象一下,这种情况每天都会发生几次.你可能会说不好的计划?我可能同意你的意见,但我确实认为发展自由在现代编码中至关重要.在你开始编写代码之前,我认为你不应该试图预测你的项目可能会采取的每一个转变.
确保像上面描述的问题永远不会发生的一种方法是重写方法如下:
public void Update()
{
UpdateMovement();
if (!IsIncapacitated)
{
if (IsInventoryOpened)
{
UpdateInventory();
}
else
{
if (Input.HasAction(Actions.Fire))
{
Fire();
}
else if (Input.HasAction(Actions.Move))
{
Move(Input.Axis);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你总是可以在底部添加一行,并确保它总是被称为nomatter是什么.
所以我想询问是否有另一种方法可以允许在任何地方放置"返回"-s,同时仍然可以随时在方法的底部轻松添加额外的代码.也许c#中有任何形式的语法可以帮到你吗?或者也许有更好的编码实践可以消除这样的问题?
更新:当我开始收到答案时,我意识到我需要澄清一些事情.
'try/catch/finally'是一种矫枉过正 - 我永远不会使用它们.它们对catch()有严重的性能损失,它们搞砸了Visual Studio中的"编辑并继续"功能,它们看起来很丑陋.
理想我需要能够从我决定在方法结尾添加的任何代码中访问Update()方法中的局部变量,
当我写这个问题时,我已经有了一个答案 - 嵌套.我的第二个代码示例没有返回,因此我可以在方法的最底部添加代码,它将在100%的时间内工作,而我将能够使用局部变量.嵌套很糟糕,这就是为什么我在这里寻找更好的解决方案.
更新2: …
这是我的字符串(即字符串NOT int):
string code = "0101";
Run Code Online (Sandbox Code Playgroud)
这是我的SQL:
string select = "SELECT " + code + " AS code" ...
Run Code Online (Sandbox Code Playgroud)
这是我在表中得到的:
code
101
101
101
...
Run Code Online (Sandbox Code Playgroud)
这就是我需要的:
code
0101
0101
...
Run Code Online (Sandbox Code Playgroud)
PS试过两个CAST和CONVERT.
c# ×3
.net ×1
adornment ×1
asynchronous ×1
breakpoints ×1
debugging ×1
mysql ×1
select ×1
sql ×1