在第一个异常后退出 while 循环中的 Try-Catch
Try-Catch inside while loop exits after first Exception
我有一个 Windows 服务在实例化后立即运行以下 Initialize()
方法。
public async virtual void Initialize()
{
bool initSuccess = false;
int retry = 1;
while (!initSuccess && retry <= 10)
{
try
{
schedulerFactory = CreateSchedulerFactory();
scheduler = GetScheduler();
initSuccess = true;
}
catch (Exception ex)
{
logger.Error(string.Format("Server initialization failed, retry #{0} of 10 / Error message: {1}", retry, ex.Message));
retry++;
}
Task startTimer = Task.Factory.StartNew(() =>
{
Thread.Sleep(10000);
});
await startTimer;
}
}
所以如果初始化失败,我想再给服务器10次尝试启动。调用上述函数的代码为:
QuartzServer server = new QuartzServer();
server.Initialize();
return server;
出于某种原因,此 Initialize()
方法在第一次迭代后退出。这意味着我的 while 循环似乎没有用,尽管我可以在我的日志中看到 Exception
被捕获。任何人都可以检测到代码逻辑有什么问题吗?
Initialize 是一种 async void
方法,通常应避免使用它,并且仅用于事件处理程序。原因是不可能等待这种方法完成,因为它没有 return 和 Task
。第一次到达 await startTimer
语句时,Initialize
将 return 控制权交给它的调用者,因此看起来 while 循环已经退出,但实际上并没有。
我有一个 Windows 服务在实例化后立即运行以下 Initialize()
方法。
public async virtual void Initialize()
{
bool initSuccess = false;
int retry = 1;
while (!initSuccess && retry <= 10)
{
try
{
schedulerFactory = CreateSchedulerFactory();
scheduler = GetScheduler();
initSuccess = true;
}
catch (Exception ex)
{
logger.Error(string.Format("Server initialization failed, retry #{0} of 10 / Error message: {1}", retry, ex.Message));
retry++;
}
Task startTimer = Task.Factory.StartNew(() =>
{
Thread.Sleep(10000);
});
await startTimer;
}
}
所以如果初始化失败,我想再给服务器10次尝试启动。调用上述函数的代码为:
QuartzServer server = new QuartzServer();
server.Initialize();
return server;
出于某种原因,此 Initialize()
方法在第一次迭代后退出。这意味着我的 while 循环似乎没有用,尽管我可以在我的日志中看到 Exception
被捕获。任何人都可以检测到代码逻辑有什么问题吗?
Initialize 是一种 async void
方法,通常应避免使用它,并且仅用于事件处理程序。原因是不可能等待这种方法完成,因为它没有 return 和 Task
。第一次到达 await startTimer
语句时,Initialize
将 return 控制权交给它的调用者,因此看起来 while 循环已经退出,但实际上并没有。