Skip to content

Commit 5e08697

Browse files
committed
Fix cancellation in ReceiveFrameBytesAsync
1 parent 10a263b commit 5e08697

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/NetMQ/AsyncReceiveExtensions.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public static async Task<NetMQMessage> ReceiveMultipartMessageAsync(
8585
}
8686

8787
TaskCompletionSource<(byte[], bool)> source = new TaskCompletionSource<(byte[], bool)>();
88-
cancellationToken.Register(() => source.SetCanceled());
88+
var registration = cancellationToken.Register(PropagateCancel);
8989

9090
void Listener(object sender, NetMQSocketEventArgs args)
9191
{
@@ -96,9 +96,17 @@ void Listener(object sender, NetMQSocketEventArgs args)
9696
msg.Close();
9797

9898
socket.ReceiveReady -= Listener;
99-
source.SetResult((data, more));
99+
registration.Dispose();
100+
source.TrySetResult((data, more));
100101
}
101102
}
103+
104+
void PropagateCancel()
105+
{
106+
socket.ReceiveReady -= Listener;
107+
registration.Dispose();
108+
source.TrySetCanceled();
109+
}
102110

103111
socket.ReceiveReady += Listener;
104112

0 commit comments

Comments
 (0)