偶尔我需要在放弃之前多次重试一次手术.我的代码是这样的:
int retries = 3;
while(true) {
try {
DoSomething();
break; // success!
} catch {
if(--retries == 0) throw;
else Thread.Sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
我想在一般的重试函数中重写它,如:
TryThreeTimes(DoSomething);
Run Code Online (Sandbox Code Playgroud)
在C#中有可能吗?该TryThreeTimes()方法的代码是什么?
我认为如果您的程序没有,GC会最终调用Dispose,但是您应该在程序中调用Dispose()以使清除确定性.
但是,从我的小测试程序来看,我根本没有看到Dispose被调用....
public class Test : IDisposable
{
static void Main(string[] args)
{
Test s = new Test();
s = null;
GC.Collect();
Console.ReadLine();
}
public Test()
{
Console.WriteLine("Constructor");
}
public void Dispose()
{
Console.WriteLine("Dispose");
}
}
Run Code Online (Sandbox Code Playgroud)
//输出只是"构造函数",我没有像我期望的那样得到"Dispose".这是怎么回事?
编辑:是的,我知道我应该调用Dispose() - 我在使用一次性物体时遵循标准模式.我的问题出现了,因为我试图追踪某些elses代码的漏洞,这是托管C++(另一层复杂性,这将是另一个线程的好主题).
我有一个像......的方法
int f() {
try {
int i = process();
return i;
} catch(Exception ex) {
ThrowSpecificFault(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生编译器错误,"并非所有代码路径都返回值".但在我的情况下,ThrowSpecificFault()将始终抛出(相应的)异常.所以我被迫在最后放一个返回值,但这很难看.
首先,这种模式的目的是因为"process()"是对外部Web服务的调用,但需要转换各种不同的异常以匹配客户端的预期接口(我认为是〜外观模式).
有什么更干净的方法吗?
我安装了.NET 2.0运行时,然后我安装了.NET 4.0运行时,所以我有两个.当我运行.NET应用程序时,有没有办法强制使用哪个运行时?
编辑/澄清: 我的意思是没有关于如何构建应用程序的问题.我假设.NET 4.0运行时可以运行5年前编译的针对2.0运行时(oldprogram.exe)的.NET程序.所以现在我在两台运行时的机器上,其中任何一个都可以处理oldprogram.exe.选择了哪个运行时?我可以影响选择哪个运行时?
有一种简单的方法可以在JavaScript中制作游戏循环吗?就像是...
onTimerTick() {
// update game state
}
Run Code Online (Sandbox Code Playgroud) 我需要调用一个第三方库来碰巧向控制台吐出一堆东西.代码就像这样......
int MyMethod(int a)
{
int b = ThirdPartyLibrary.Transform(a); // spews unwanted console output
return b;
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来抑制ThirdPartyLibrary中不需要的控制台输出?出于性能原因,解决方案中不能使用新进程或线程.
我想知道是否有人知道自动将常见故障注入正在运行的.NET程序的工具或技术.好像......
所以我真的在寻找一种方法来拦截CLR中的一些特定调用,类似于AppVerifier对本机Win32代码的调用.目的是在开发人员控制之外的许多错误条件下测试应用程序,并确保处理这些条件.
如果我正在访问成员字段,属性或方法,我将永远不确定何时应该使用'this'作为前缀.
我不是在询问需要它的情况,例如局部变量具有相同名称的情况.我说的是意义完全相同的情况.哪个更具可读性?我应该遵循哪些标准,最佳实践或经验法则?它应该在整个班级或整个代码库中保持一致吗?
.NET System.Threading Timer类有几个重载的Change()方法,如果计时器成功更新,则返回"true";否则返回false.
参考:http://msdn.microsoft.com/en-us/library/yz1c7148.aspx
这种方法实际上是否真的返回false?什么会导致这返回错误?
有没有一种简单的方法从X509Certificate2对象获取主题备用名称?
foreach (X509Extension ext in certificate.Extensions)
{
if (ext.Oid.Value.Equals(/* SAN OID */"2.5.29.17"))
{
byte[] raw = ext.RawData;
// ?????? parse to get type and name ????????
}
}
Run Code Online (Sandbox Code Playgroud) .net ×8
c# ×6
certificate ×1
clr ×1
coding-style ×1
dispose ×1
exception ×1
fault ×1
game-loop ×1
intercept ×1
javascript ×1
memory ×1
timer ×1