private Task PrepareDebuggerServer()

in resharper/src/UnitTesting/GodotTestRunnerHost.cs [64:97]


        private Task PrepareDebuggerServer(IUnitTestRun run)
        {
            var tcs = new TaskCompletionSource<bool>();
            var taskLifetimeDef = Lifetime.Define(run.Lifetime);
            taskLifetimeDef.SynchronizeWith(tcs);
            var taskLifetime = taskLifetimeDef.Lifetime;

            var solution = run.Launch.Solution;
            var model = solution.GetProtocolSolution().GetGodotFrontendBackendModel();
            solution.Locks.ExecuteOrQueueEx(taskLifetime, "AttachDebuggerToGodotEditor", () =>
            {
                if (!taskLifetime.IsAlive || model == null)
                {
                    tcs.TrySetCanceled();
                    return;
                }

                var task = model.StartDebuggerServer.Start(taskLifetime, Unit.Instance);
                task.Result.Advise(taskLifetime, result =>
                {
                    if (!run.Lifetime.IsAlive)
                        tcs.TrySetCanceled();
                    else if (result.Result <= 0)
                        tcs.SetException(new Exception("Unable to start debugger."));
                    else
                    {
                        myDebugPort = result.Result;
                        tcs.SetResult(true);
                    }
                });
            });

            return tcs.Task;
        }