{"record":{"id":"7bae81037912ff13","repo":"dotnet/BenchmarkDotNet","slug":"awaithelper-getresult-is-not-available-for-workloa","errorCode":null,"errorMessage":"AwaitHelper.GetResult is not available for workload return type {0}. ConsumeTasksSynchronously only supports (Value)Task(<T>).","messagePattern":"AwaitHelper\\.GetResult is not available for workload return type (.+?)\\. ConsumeTasksSynchronously only supports \\(Value\\)Task\\(<T>\\)\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/BenchmarkDotNet/Toolchains/InProcess/Emit/Implementation/Emitters/SyncTaskCoreEmitter.cs","lineNumber":50,"sourceCode":"                };\n\n        protected override void EmitExtraGlobalCleanup(ILGenerator ilBuilder, LocalBuilder? thisLocal) { }\n\n        protected override void EmitCoreImpl()\n        {\n            EmitAction(OverheadActionUnrollMethodName, overheadImplementationMethod, jobUnrollFactor, isWorkload: false);\n            EmitAction(OverheadActionNoUnrollMethodName, overheadImplementationMethod, 1, isWorkload: false);\n            EmitAction(WorkloadActionUnrollMethodName, Descriptor.WorkloadMethod, jobUnrollFactor, isWorkload: true);\n            EmitAction(WorkloadActionNoUnrollMethodName, Descriptor.WorkloadMethod, 1, isWorkload: true);\n        }\n\n        private MethodBuilder EmitAction(string methodName, MethodInfo methodToCall, int unrollFactor, bool isWorkload)\n        {\n            MethodInfo? getResultMethod = null;\n            if (isWorkload)\n            {\n                getResultMethod = AwaitHelper.GetGetResultMethod(methodToCall.ReturnType)\n                    ?? throw new InvalidOperationException(\n                        $\"AwaitHelper.GetResult is not available for workload return type {methodToCall.ReturnType.GetDisplayName()}. ConsumeTasksSynchronously only supports (Value)Task(<T>).\");\n            }\n\n            var invokeCountArg = new EmitParameterInfo(0, InvokeCountParamName, typeof(long));\n            var actionMethodBuilder = runnableBuilder\n                .DefineNonVirtualInstanceMethod(\n                    methodName,\n                    MethodAttributes.Private,\n                    EmitParameterInfo.CreateReturnParameter(typeof(ValueTask<ClockSpan>)),\n                    [\n                        invokeCountArg,\n                        new EmitParameterInfo(1, ClockParamName, typeof(IClock))\n                    ]\n                )\n                .SetAggressiveOptimizationImplementationFlag();\n            invokeCountArg.SetMember(actionMethodBuilder);\n\n            var ilBuilder = actionMethodBuilder.GetILGenerator();","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/dotnet/BenchmarkDotNet/blob/b515068b61ad1c9c9aa938b8ece4af1e7d6d85a3/src/BenchmarkDotNet/Toolchains/InProcess/Emit/Implementation/Emitters/SyncTaskCoreEmitter.cs#L32-L68","documentation":"SyncTaskCoreEmitter consumes awaitable results synchronously via AwaitHelper.GetResult, which is only implemented for (Value)Task and (Value)Task<T>; other awaitable return types are rejected.","triggerScenarios":"Thrown at src/BenchmarkDotNet/Toolchains/InProcess/Emit/Implementation/Emitters/SyncTaskCoreEmitter.cs:50 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Return Task, Task<T>, ValueTask, or ValueTask<T> from the benchmark when ConsumeTasksSynchronously is enabled.","Disable ConsumeTasksSynchronously in the config and let BDN await the result asynchronously.","For custom awaitables, use the default (out-of-process) toolchain."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b515068b61ad1c9c9aa938b8ece4af1e7d6d85a3","analyzedAt":"2026-08-13T19:12:24.196Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}