public async void WorkerRestart(WorkerRestartEvent workerRestart) { if (!_disposing) { _logger.LogDebug("Handling WorkerRestartEvent for runtime:{runtime}, workerId:{workerId}", workerRestart.Language, workerRestart.WorkerId); await DisposeAndRestartWorkerChannel(workerRestart.Language, workerRestart.WorkerId); } }
public async void WorkerRestart(WorkerRestartEvent workerRestart) { if (_disposing || _disposed) { return; } try { _logger.LogDebug("Handling WorkerRestartEvent for runtime:{runtime}, workerId:{workerId}", workerRestart.Language, workerRestart.WorkerId); await DisposeAndRestartWorkerChannel(workerRestart.Language, workerRestart.WorkerId); } catch (TaskCanceledException) { // Specifically in the "we were torn down while trying to restart" case, we want to catch here and ignore // If we don't catch the exception from an async void method, we'll end up tearing down the entire runtime instead // It's possible we want to catch *all* exceptions and log or ignore here, but taking the minimal change first // For example if we capture and log, we're left in a worker-less state with a working Host runtime - is that desired? Will it self recover elsewhere? } }