在第一个异常后退出 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 循环已经退出,但实际上并没有。