diff --git a/gold-client/go/goldclient/goldclient.go b/gold-client/go/goldclient/goldclient.go
index 0c3421f..c2d588a 100644
--- a/gold-client/go/goldclient/goldclient.go
+++ b/gold-client/go/goldclient/goldclient.go
@@ -29,6 +29,7 @@
 	"go.skia.org/infra/golden/go/shared"
 	"go.skia.org/infra/golden/go/types"
 	"golang.org/x/oauth2"
+	"golang.org/x/sync/errgroup"
 )
 
 const (
@@ -191,12 +192,16 @@
 		return false, err
 	}
 
+	var egroup errgroup.Group
 	// Check against known hashes and upload if needed.
 	if !c.resultState.KnownHashes[imgHash] {
-		gcsImagePath := c.resultState.getGCSImagePath(imgHash)
-		if err := uploader.uploadBytesOrFile(imgBytes, imgFileName, prefixGCS(gcsImagePath)); err != nil {
-			return false, skerr.Fmt("Error uploading image: %s", err)
-		}
+		egroup.Go(func() error {
+			gcsImagePath := c.resultState.getGCSImagePath(imgHash)
+			if err := uploader.uploadBytesOrFile(imgBytes, imgFileName, prefixGCS(gcsImagePath)); err != nil {
+				return skerr.Fmt("Error uploading image %s to %s. Got: %s", imgFileName, gcsImagePath, err)
+			}
+			return nil
+		})
 	}
 
 	// Add the result of this test.
@@ -208,16 +213,23 @@
 	}
 
 	// If we do per test pass/fail then upload the result and compare it to the baseline.
+	ret := true
 	if c.resultState.PerTestPassFail {
-		localFileName := filepath.Join(c.workDir, jsonTempFile)
-		if err := uploader.uploadJson(c.resultState.GoldResults, localFileName, c.resultState.getResultFilePath()); err != nil {
-			return false, err
-		}
-		return c.resultState.Expectations[name][imgHash] == types.POSITIVE, nil
+		egroup.Go(func() error {
+			localFileName := filepath.Join(c.workDir, jsonTempFile)
+			resultFilePath := c.resultState.getResultFilePath()
+			if err := uploader.uploadJson(c.resultState.GoldResults, localFileName, resultFilePath); err != nil {
+				return skerr.Fmt("Error uploading JSON file to GCS path %s: %s", resultFilePath, err)
+			}
+			return nil
+		})
+		ret = c.resultState.Expectations[name][imgHash] == types.POSITIVE
 	}
 
-	// If we don't do per-test pass/fail then return true.
-	return true, nil
+	if err := egroup.Wait(); err != nil {
+		return false, err
+	}
+	return ret, nil
 }
 
 // initResultState assembles the information that needs to be uploaded based on previous calls
