{"record":{"id":"540ad7981492a651","repo":"Cysharp/UniTask","slug":"not-yet-completed-540ad7","errorCode":null,"errorMessage":"not yet completed.","messagePattern":"not yet completed\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskCompletionSource.cs","lineNumber":655,"sourceCode":"\n        [DebuggerHidden]\n        public void GetResult(short token)\n        {\n            MarkHandled();\n\n            var status = (UniTaskStatus)intStatus;\n            switch (status)\n            {\n                case UniTaskStatus.Succeeded:\n                    return;\n                case UniTaskStatus.Faulted:\n                    exception.GetException().Throw();\n                    return;\n                case UniTaskStatus.Canceled:\n                    throw new OperationCanceledException(cancellationToken);\n                default:\n                case UniTaskStatus.Pending:\n                    throw new InvalidOperationException(\"not yet completed.\");\n            }\n        }\n\n        [DebuggerHidden]\n        public UniTaskStatus GetStatus(short token)\n        {\n            return (UniTaskStatus)intStatus;\n        }\n\n        [DebuggerHidden]\n        public UniTaskStatus UnsafeGetStatus()\n        {\n            return (UniTaskStatus)intStatus;\n        }\n\n        [DebuggerHidden]\n        public void OnCompleted(Action<object> continuation, object state, short token)\n        {","sourceCodeStart":637,"sourceCodeEnd":673,"githubUrl":"https://github.com/Cysharp/UniTask/blob/ceac8d6946b1125fe782cd171fbcb245b567dbf9/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskCompletionSource.cs#L637-L673","documentation":"Thrown by AutoResetUniTaskCompletionSource.GetResult (non-generic) when the internal status is still Pending. This source type is auto-reset and meant to be awaited; calling GetResult before the source is signaled indicates the awaiter consumed a result that was never produced. The guard prevents returning uninitialized state.","triggerScenarios":"Manually calling GetResult on an AutoResetUniTaskCompletionSource before TrySetResult/TrySetException/TrySetCanceled. Awaiting a task whose signaling path was skipped due to a logic error. Using the source after it was auto-reset without re-signaling.","commonSituations":"Creating an AutoResetUniTaskCompletionSource for a callback-based API but forgetting to call TrySetResult in one or more callback branches. Race conditions where the source is reset before GetResult. Adapters that conditionally signal.","solutions":["Ensure all callback paths call TrySetResult, TrySetException, or TrySetCanceled","Use await rather than manual GetResult calls","Check status before accessing: if (source.UnsafeGetStatus() != UniTaskStatus.Pending) before GetResult"],"exampleFix":"// before\nvar source = AutoResetUniTaskCompletionSource.Create();\n// forgot to signal\nvar result = source.GetResult(0); // throws\n\n// after\nvar source = AutoResetUniTaskCompletionSource.Create();\nsource.TrySetResult();\nawait source.Task; // ok","handlingStrategy":"validation","validationCode":"if (source.UnsafeGetStatus() == UniTaskStatus.Pending)\n{\n    // not ready; signal or await\n    return;\n}\nsource.GetResult(token);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure every callback branch calls TrySetResult/TrySetException/TrySetCanceled","Prefer await over manual GetResult","Add a timeout fallback signal so the source always completes"],"tags":["unitask","completion-source","await-violation","auto-reset","unity","csharp"],"backgroundTag":null,"analyzedSha":"ceac8d6946b1125fe782cd171fbcb245b567dbf9","analyzedAt":"2026-08-13T19:16:39.025Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}