Skip to content

Commit 9b50f7f

Browse files
committed
Minor optimizations
- Add ConfigureAwait(false) to all await calls. - Don't waste allocation of zero length array. - Don't use async/await if not necessary (avoid state machine creation under the hood).
1 parent 2b55d6f commit 9b50f7f

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

src/Firebase/Http/HttpClientExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public static async Task<IReadOnlyCollection<FirebaseObject<T>>> GetObjectCollec
4141

4242
if (dictionary == null)
4343
{
44-
return new FirebaseObject<T>[0];
44+
return Array.Empty<FirebaseObject<T>>();
4545
}
4646

4747
return dictionary.Select(item => new FirebaseObject<T>(item.Key, item.Value)).ToList();

src/Firebase/Offline/RealtimeDatabase.cs

+9-9
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ private IObservable<IReadOnlyCollection<FirebaseObject<T>>> GetInitialPullObserv
293293
}
294294

295295
// there is an element root, which indicates the target location is not a collection but a single element
296-
return Observable.Defer(async () => Observable.Return(await query.OnceSingleAsync<T>()).Select(e => new[] { new FirebaseObject<T>(this.elementRoot, e) }));
296+
return Observable.Defer(async () => Observable.Return(await query.OnceSingleAsync<T>().ConfigureAwait(false)).Select(e => new[] { new FirebaseObject<T>(this.elementRoot, e) }));
297297
}
298298

299299
private IDisposable InitializeStreamingSubscription(IObserver<FirebaseEvent<T>> observer)
@@ -336,19 +336,19 @@ private async void SynchronizeThread()
336336
try
337337
{
338338
var validEntries = this.Database.Where(e => e.Value != null);
339-
await this.PullEntriesAsync(validEntries.Where(kvp => kvp.Value.SyncOptions == SyncOptions.Pull));
339+
await PullEntriesAsync(validEntries.Where(kvp => kvp.Value.SyncOptions == SyncOptions.Pull)).ConfigureAwait(false);
340340

341341
if (this.pushChanges)
342342
{
343-
await this.PushEntriesAsync(validEntries.Where(kvp => kvp.Value.SyncOptions == SyncOptions.Put || kvp.Value.SyncOptions == SyncOptions.Patch));
343+
await PushEntriesAsync(validEntries.Where(kvp => kvp.Value.SyncOptions == SyncOptions.Put || kvp.Value.SyncOptions == SyncOptions.Patch)).ConfigureAwait(false);
344344
}
345345
}
346346
catch (Exception ex)
347347
{
348348
this.SyncExceptionThrown?.Invoke(this, new ExceptionEventArgs(ex));
349349
}
350350

351-
await Task.Delay(this.childQuery.Client.Options.SyncPeriod);
351+
await Task.Delay(childQuery.Client.Options.SyncPeriod).ConfigureAwait(false);
352352
}
353353
}
354354

@@ -377,7 +377,7 @@ private async Task PushEntriesAsync(IEnumerable<KeyValuePair<string, OfflineEntr
377377

378378
try
379379
{
380-
await Task.WhenAll(tasks).WithAggregateException();
380+
await Task.WhenAll(tasks).WithAggregateException().ConfigureAwait(false);
381381
}
382382
catch (Exception ex)
383383
{
@@ -396,7 +396,7 @@ private async Task PullEntriesAsync(IEnumerable<KeyValuePair<string, OfflineEntr
396396

397397
try
398398
{
399-
await Task.WhenAll(tasks).WithAggregateException();
399+
await Task.WhenAll(tasks).WithAggregateException().ConfigureAwait(false);
400400
}
401401
catch (Exception ex)
402402
{
@@ -407,13 +407,13 @@ private async Task PullEntriesAsync(IEnumerable<KeyValuePair<string, OfflineEntr
407407

408408
private async Task ResetAfterPull(Task<T> task, string key, OfflineEntry entry)
409409
{
410-
await task;
410+
await task.ConfigureAwait(false);
411411
this.SetAndRaise(key, new OfflineEntry(key, task.Result, entry.Priority, SyncOptions.None), FirebaseEventSource.OnlinePull);
412412
}
413413

414414
private async Task ResetSyncAfterPush(Task task, string key, T obj)
415415
{
416-
await this.ResetSyncAfterPush(task, key);
416+
await ResetSyncAfterPush(task, key).ConfigureAwait(false);
417417

418418
if (this.streamingOptions == StreamingOptions.None)
419419
{
@@ -423,7 +423,7 @@ private async Task ResetSyncAfterPush(Task task, string key, T obj)
423423

424424
private async Task ResetSyncAfterPush(Task task, string key)
425425
{
426-
await task;
426+
await task.ConfigureAwait(false);
427427
this.ResetSyncOptions(key);
428428
}
429429

src/Firebase/Offline/SetHandler.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66

77
public class SetHandler<T> : ISetHandler<T>
88
{
9-
public virtual async Task SetAsync(ChildQuery query, string key, OfflineEntry entry)
9+
public virtual Task SetAsync(ChildQuery query, string key, OfflineEntry entry)
1010
{
1111
using (var child = query.Child(key))
1212
{
1313
if (entry.SyncOptions == SyncOptions.Put)
1414
{
15-
await child.PutAsync(entry.Data);
15+
return child.PutAsync(entry.Data);
1616
}
1717
else
1818
{
19-
await child.PatchAsync(entry.Data);
19+
20+
return child.PatchAsync(entry.Data);
2021
}
2122
}
2223
}

src/Firebase/Query/FirebaseQuery.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,11 @@ public async Task<FirebaseObject<string>> PostAsync(string data, bool generateKe
172172
/// <param name="timeout"> Optional timeout value. </param>
173173
/// <typeparam name="T"> Type of <see cref="obj"/> </typeparam>
174174
/// <returns> The <see cref="Task"/>. </returns>
175-
public async Task PatchAsync(string data, TimeSpan? timeout = null)
175+
public Task PatchAsync(string data, TimeSpan? timeout = null)
176176
{
177177
var c = this.GetClient(timeout);
178178

179-
await this.Silent().SendAsync(c, data, new HttpMethod("PATCH")).ConfigureAwait(false);
179+
return this.Silent().SendAsync(c, data, new HttpMethod("PATCH"));
180180
}
181181

182182
/// <summary>
@@ -186,11 +186,11 @@ public async Task PatchAsync(string data, TimeSpan? timeout = null)
186186
/// <param name="timeout"> Optional timeout value. </param>
187187
/// <typeparam name="T"> Type of <see cref="obj"/> </typeparam>
188188
/// <returns> The <see cref="Task"/>. </returns>
189-
public async Task PutAsync(string data, TimeSpan? timeout = null)
189+
public Task PutAsync(string data, TimeSpan? timeout = null)
190190
{
191191
var c = this.GetClient(timeout);
192192

193-
await this.Silent().SendAsync(c, data, HttpMethod.Put).ConfigureAwait(false);
193+
return this.Silent().SendAsync(c, data, HttpMethod.Put);
194194
}
195195

196196
/// <summary>

src/Firebase/Query/QueryExtensions.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public static Task PatchAsync<T>(this FirebaseQuery query, T obj)
219219

220220
public static async Task<FirebaseObject<T>> PostAsync<T>(this FirebaseQuery query, T obj, bool generateKeyOffline = true)
221221
{
222-
var result = await query.PostAsync(JsonConvert.SerializeObject(obj, query.Client.Options.JsonSerializerSettings), generateKeyOffline);
222+
var result = await query.PostAsync(JsonConvert.SerializeObject(obj, query.Client.Options.JsonSerializerSettings), generateKeyOffline).ConfigureAwait(false);
223223

224224
return new FirebaseObject<T>(result.Key, obj);
225225
}
@@ -231,7 +231,7 @@ public static async Task<FirebaseObject<T>> PostAsync<T>(this FirebaseQuery quer
231231
/// <param name="query"> Current node. </param>
232232
/// <param name="item"> Object to fan out. </param>
233233
/// <param name="relativePaths"> Locations where to store the item. </param>
234-
public static async Task FanOut<T>(this ChildQuery child, T item, params string[] relativePaths)
234+
public static Task FanOut<T>(this ChildQuery child, T item, params string[] relativePaths)
235235
{
236236
if (relativePaths == null)
237237
{
@@ -245,7 +245,7 @@ public static async Task FanOut<T>(this ChildQuery child, T item, params string[
245245
fanoutObject.Add(path, item);
246246
}
247247

248-
await child.PatchAsync(fanoutObject);
248+
return child.PatchAsync(fanoutObject);
249249
}
250250
}
251251
}

0 commit comments

Comments
 (0)