Skip to content

Commit 317d4ad

Browse files
authored
Add missing ConfigureAwaits(false) for async using (#1276)
1 parent 6455aaf commit 317d4ad

File tree

9 files changed

+116
-60
lines changed

9 files changed

+116
-60
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Fixes
6+
7+
- Add missing `ConfigureAwaits(false)` for `async using` ([#1276](https://github.com/getsentry/sentry-dotnet/pull/1276))
8+
39
## 3.10.0
410

511
### Features

src/Sentry/Envelopes/Envelope.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,17 @@ value is string valueString &&
4848

4949
private async Task SerializeHeaderAsync(Stream stream, CancellationToken cancellationToken = default)
5050
{
51-
await using var writer = new Utf8JsonWriter(stream);
52-
writer.WriteDictionaryValue(Header);
53-
await writer.FlushAsync(cancellationToken).ConfigureAwait(false);
51+
var writer = new Utf8JsonWriter(stream);
52+
53+
#if NET461 || NETSTANDARD2_0
54+
using (writer)
55+
#else
56+
await using (writer.ConfigureAwait(false))
57+
#endif
58+
{
59+
writer.WriteDictionaryValue(Header);
60+
await writer.FlushAsync(cancellationToken).ConfigureAwait(false);
61+
}
5462
}
5563

5664
/// <inheritdoc />

src/Sentry/Envelopes/EnvelopeItem.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,16 @@ private static async Task SerializeHeaderAsync(
7373
IReadOnlyDictionary<string, object?> header,
7474
CancellationToken cancellationToken = default)
7575
{
76-
await using var writer = new Utf8JsonWriter(stream);
77-
writer.WriteDictionaryValue(header);
78-
await writer.FlushAsync(cancellationToken).ConfigureAwait(false);
76+
var writer = new Utf8JsonWriter(stream);
77+
#if NET461 || NETSTANDARD2_0
78+
using (writer)
79+
#else
80+
await using (writer.ConfigureAwait(false))
81+
#endif
82+
{
83+
writer.WriteDictionaryValue(header);
84+
await writer.FlushAsync(cancellationToken).ConfigureAwait(false);
85+
}
7986
}
8087

8188
private async Task SerializeHeaderAsync(
@@ -99,20 +106,23 @@ public async Task SerializeAsync(Stream stream, CancellationToken cancellationTo
99106
// Length is NOT known (need to calculate)
100107
else
101108
{
102-
#if !NET461 && !NETSTANDARD2_0
103-
await
109+
var payloadBuffer = await BufferPayloadAsync(cancellationToken).ConfigureAwait(false);
110+
#if NET461 || NETSTANDARD2_0
111+
using (payloadBuffer)
112+
#else
113+
await using (payloadBuffer.ConfigureAwait(false))
104114
#endif
105-
using var payloadBuffer = await BufferPayloadAsync(cancellationToken).ConfigureAwait(false);
106-
107-
// Header
108-
var headerWithLength = Header.ToDictionary();
109-
headerWithLength[LengthKey] = payloadBuffer.Length;
115+
{
116+
// Header
117+
var headerWithLength = Header.ToDictionary();
118+
headerWithLength[LengthKey] = payloadBuffer.Length;
110119

111-
await SerializeHeaderAsync(stream, headerWithLength, cancellationToken).ConfigureAwait(false);
112-
await stream.WriteByteAsync((byte)'\n', cancellationToken).ConfigureAwait(false);
120+
await SerializeHeaderAsync(stream, headerWithLength, cancellationToken).ConfigureAwait(false);
121+
await stream.WriteByteAsync((byte)'\n', cancellationToken).ConfigureAwait(false);
113122

114-
// Payload
115-
await payloadBuffer.CopyToAsync(stream, cancellationToken).ConfigureAwait(false);
123+
// Payload
124+
await payloadBuffer.CopyToAsync(stream, cancellationToken).ConfigureAwait(false);
125+
}
116126
}
117127
}
118128

src/Sentry/Envelopes/JsonSerializable.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,17 @@ internal sealed class JsonSerializable : ISerializable
2323
/// <inheritdoc />
2424
public async Task SerializeAsync(Stream stream, CancellationToken cancellationToken = default)
2525
{
26-
await using var writer = new Utf8JsonWriter(stream);
27-
Source.WriteTo(writer);
28-
await writer.FlushAsync(cancellationToken).ConfigureAwait(false);
26+
var writer = new Utf8JsonWriter(stream);
27+
28+
#if NET461 || NETSTANDARD2_0
29+
using (writer)
30+
#else
31+
await using (writer.ConfigureAwait(false))
32+
#endif
33+
{
34+
Source.WriteTo(writer);
35+
await writer.FlushAsync(cancellationToken).ConfigureAwait(false);
36+
}
2937
}
3038
}
3139
}

src/Sentry/Internal/Extensions/HttpClientExtensions.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ public static async Task<JsonElement> ReadAsJsonAsync(
1111
this HttpContent content,
1212
CancellationToken cancellationToken = default)
1313
{
14-
#if !NET461 && !NETSTANDARD2_0
15-
await
14+
var stream = await content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
15+
#if NET461 || NETSTANDARD2_0
16+
using (stream)
17+
#else
18+
await using (stream.ConfigureAwait(false))
1619
#endif
17-
using var stream = await content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
18-
using var jsonDocument = await JsonDocument.ParseAsync(stream, default, cancellationToken).ConfigureAwait(false);
20+
{
21+
using var document = await JsonDocument.ParseAsync(stream, default, cancellationToken).ConfigureAwait(false);
1922

20-
return jsonDocument.RootElement.Clone();
23+
return document.RootElement.Clone();
24+
}
2125
}
2226
}
2327
}

src/Sentry/Internal/Http/CachingTransport.cs

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -156,22 +156,7 @@ private async Task ProcessCacheAsync(CancellationToken cancellationToken = defau
156156

157157
try
158158
{
159-
#if !NET461 && !NETSTANDARD2_0
160-
await
161-
#endif
162-
using var envelopeFile = File.OpenRead(envelopeFilePath);
163-
using var envelope = await Envelope.DeserializeAsync(envelopeFile, cancellationToken)
164-
.ConfigureAwait(false);
165-
166-
_options.LogDebug(
167-
"Sending cached envelope: {0}",
168-
envelope.TryGetEventId());
169-
170-
await _innerTransport.SendEnvelopeAsync(envelope, cancellationToken).ConfigureAwait(false);
171-
172-
_options.LogDebug(
173-
"Successfully sent cached envelope: {0}",
174-
envelope.TryGetEventId());
159+
await InnerProcessCacheAsync(cancellationToken, envelopeFilePath).ConfigureAwait(false);
175160
}
176161
catch (Exception ex) when (IsRetryable(ex))
177162
{
@@ -198,6 +183,30 @@ private async Task ProcessCacheAsync(CancellationToken cancellationToken = defau
198183
}
199184
}
200185

186+
private async Task InnerProcessCacheAsync(CancellationToken cancellationToken, string envelopeFilePath)
187+
{
188+
var envelopeFile = File.OpenRead(envelopeFilePath);
189+
#if NET461 || NETSTANDARD2_0
190+
using (envelopeFile)
191+
#else
192+
await using (envelopeFile.ConfigureAwait(false))
193+
#endif
194+
{
195+
using var envelope = await Envelope.DeserializeAsync(envelopeFile, cancellationToken)
196+
.ConfigureAwait(false);
197+
198+
_options.LogDebug(
199+
"Sending cached envelope: {0}",
200+
envelope.TryGetEventId());
201+
202+
await _innerTransport.SendEnvelopeAsync(envelope, cancellationToken).ConfigureAwait(false);
203+
204+
_options.LogDebug(
205+
"Successfully sent cached envelope: {0}",
206+
envelope.TryGetEventId());
207+
}
208+
}
209+
201210
// Loading an Envelope only reads the headers. The payload is read lazily, so we do Disk -> Network I/O
202211
// via stream directly instead of loading the whole file in memory. For that reason capturing an envelope
203212
// from disk could raise an IOException related to Disk I/O.
@@ -263,11 +272,12 @@ private async Task StoreToCacheAsync(
263272
EnsureFreeSpaceInCache();
264273

265274
Directory.CreateDirectory(_isolatedCacheDirectoryPath);
266-
267-
#if !NET461 && !NETSTANDARD2_0
268-
await
275+
var stream = File.Create(envelopeFilePath);
276+
#if NET461 || NETSTANDARD2_0
277+
using(stream)
278+
#else
279+
await using (stream.ConfigureAwait(false))
269280
#endif
270-
using (var stream = File.Create(envelopeFilePath))
271281
{
272282
await envelope.SerializeAsync(stream, cancellationToken).ConfigureAwait(false);
273283
}

src/Sentry/Internal/Http/GzipBufferedRequestBodyHandler.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,12 @@ protected override async Task<HttpResponseMessage> SendAsync(
5353
var memoryStream = new MemoryStream();
5454
if (request.Content is not null)
5555
{
56-
#if !NET461 && !NETSTANDARD2_0
57-
await
56+
var gzipStream = new GZipStream(memoryStream, _compressionLevel, leaveOpen: true);
57+
#if NET461 || NETSTANDARD2_0
58+
using (gzipStream)
59+
#else
60+
await using (gzipStream)
5861
#endif
59-
using (var gzipStream = new GZipStream(memoryStream, _compressionLevel, leaveOpen: true))
6062
{
6163
await request.Content.CopyToAsync(gzipStream).ConfigureAwait(false);
6264
}

src/Sentry/Internal/Http/HttpTransport.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,18 @@ private async Task HandleFailureAsync(
244244

245245
Directory.CreateDirectory(Path.GetDirectoryName(destination)!);
246246

247-
#if !NET461 && !NETSTANDARD2_0
248-
await
247+
var envelopeFile = File.Create(destination);
248+
#if NET461 || NETSTANDARD2_0
249+
using (envelopeFile)
250+
#else
251+
await using (envelopeFile)
249252
#endif
250-
using var envelopeFile = File.Create(destination);
251-
await processedEnvelope.SerializeAsync(envelopeFile, cancellationToken).ConfigureAwait(false);
252-
await envelopeFile.FlushAsync(cancellationToken).ConfigureAwait(false);
253-
_options.LogInfo("Envelope's {0} bytes written to: {1}",
254-
envelopeFile.Length, destination);
253+
{
254+
await processedEnvelope.SerializeAsync(envelopeFile, cancellationToken).ConfigureAwait(false);
255+
await envelopeFile.FlushAsync(cancellationToken).ConfigureAwait(false);
256+
_options.LogInfo("Envelope's {0} bytes written to: {1}",
257+
envelopeFile.Length, destination);
258+
}
255259
}
256260
}
257261

src/Sentry/Internal/SerializableExtensions.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ public static async Task<string> SerializeToStringAsync(
1212
this ISerializable serializable,
1313
CancellationToken cancellationToken = default)
1414
{
15-
#if !NET461 && !NETSTANDARD2_0
16-
await
15+
var stream = new MemoryStream();
16+
#if NET461 || NETSTANDARD2_0
17+
using (stream)
18+
#else
19+
await using (stream.ConfigureAwait(false))
1720
#endif
18-
using var stream = new MemoryStream();
19-
await serializable.SerializeAsync(stream, cancellationToken).ConfigureAwait(false);
20-
return Encoding.UTF8.GetString(stream.ToArray());
21+
{
22+
await serializable.SerializeAsync(stream, cancellationToken).ConfigureAwait(false);
23+
return Encoding.UTF8.GetString(stream.ToArray());
24+
}
2125
}
2226
}
2327
}

0 commit comments

Comments
 (0)