public async Task <CompileResult> Compile(WorkspaceRequest request, Budget budget = null) { var workspace = request.Workspace; budget ??= new TimeBudget(TimeSpan.FromSeconds(defaultBudgetInSeconds)); using (Log.OnEnterAndExit()) using (await locks.GetOrAdd(workspace.WorkspaceType, s => new AsyncLock()).LockAsync()) { var result = await CompileWorker(request.Workspace, request.ActiveBufferId, budget); if (result.DiagnosticsWithinBuffers.ContainsError()) { var compileResult = new CompileResult( succeeded: false, base64assembly: null, result.DiagnosticsWithinBuffers, requestId: request.RequestId); compileResult.AddFeature(new ProjectDiagnostics(result.ProjectDiagnostics)); return(compileResult); } using (var stream = new MemoryStream()) { result.Compilation.Emit(peStream: stream); var encodedAssembly = Convert.ToBase64String(stream.ToArray()); var compileResult = new CompileResult( succeeded: true, base64assembly: encodedAssembly, requestId: request.RequestId); compileResult.AddFeature(new ProjectDiagnostics(result.ProjectDiagnostics)); return(compileResult); } } }