瀏覽代碼

Make 'finish()' 'async' (#2044)

Motivation:

Finishing writes should be `async` as the underlying writer may need to
flush and write out any buffered data.

Modifications:

- Mark `finish()` as `async`
- Refactor the in-proc client transport slightly to avoid async calls
while holding a lock

Result:

`finish` is `async`
George Barnett 1 年之前
父節點
當前提交
76a6fd71c1
共有 1 個文件被更改,包括 3 次插入3 次删除
  1. 3 3
      Tests/GRPCHTTP2CoreTests/Client/Connection/GRPCChannelTests.swift

+ 3 - 3
Tests/GRPCHTTP2CoreTests/Client/Connection/GRPCChannelTests.swift

@@ -371,7 +371,7 @@ final class GRPCChannelTests: XCTestCase {
           switch state {
           case .shutdown:
             // Happens when shutting-down has been initiated, so finish the RPC.
-            stream.outbound.finish()
+            await stream.outbound.finish()
 
             let part2 = try await iterator.next()
             switch part2 {
@@ -444,7 +444,7 @@ final class GRPCChannelTests: XCTestCase {
         group.addTask {
           try await channel.withStream(descriptor: .echoGet, options: .defaults) { stream in
             try await stream.outbound.write(.metadata([:]))
-            stream.outbound.finish()
+            await stream.outbound.finish()
 
             for try await part in stream.inbound {
               switch part {
@@ -824,7 +824,7 @@ extension GRPCChannel {
       options: .defaults
     ) { stream in
       try await stream.outbound.write(.metadata([:]))
-      stream.outbound.finish()
+      await stream.outbound.finish()
 
       for try await part in stream.inbound {
         switch part {