Created
May 17, 2020 07:12
-
-
Save veton/4d9534fdfd0c592105f6bd616643546e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Threading; | |
using System.Threading.Tasks; | |
using Generic = System.Collections.Generic; | |
using Fabric = Microsoft.ServiceFabric.Data; | |
public static class FabricAsyncEnumerableExtensions | |
{ | |
/// <summary> | |
/// Converts ServiceFabric <see cref="Microsoft.ServiceFabric.Data.IAsyncEnumerable"/> to dotnet native <see cref="System.Collections.Generic.IAsyncEnumerable"/>. | |
/// </summary> | |
public static Generic.IAsyncEnumerable<T> ToGeneric<T>(this Fabric.IAsyncEnumerable<T> source) => | |
new AsyncEnumerableWrapper<T>(source); | |
private class AsyncEnumerableWrapper<T> : Generic.IAsyncEnumerable<T> | |
{ | |
private readonly Fabric.IAsyncEnumerable<T> _source; | |
public AsyncEnumerableWrapper(Fabric.IAsyncEnumerable<T> source) => _source = source; | |
public Generic.IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken _ = default) | |
{ | |
Fabric.IAsyncEnumerator<T> enumerator = _source.GetAsyncEnumerator(); | |
return new AsyncEnumeratorWrapper<T>(enumerator); | |
} | |
} | |
private class AsyncEnumeratorWrapper<T> : Generic.IAsyncEnumerator<T> | |
{ | |
private readonly Fabric.IAsyncEnumerator<T> _source; | |
public AsyncEnumeratorWrapper(Fabric.IAsyncEnumerator<T> source) => _source = source; | |
public async ValueTask DisposeAsync() => | |
await Task.Run(_source.Dispose).ConfigureAwait(false); | |
public async ValueTask<bool> MoveNextAsync() => | |
await _source.MoveNextAsync(default).ConfigureAwait(false); | |
public T Current => _source.Current; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public async Task<IEnumerable<Product>> GetAllProductsAsync() | |
{ | |
IReliableDictionary<Guid, Product> reliableDictionary = | |
await _stateManager.GetOrAddAsync<IReliableDictionary<Guid, Product>>("products").ConfigureAwait(false); | |
using ITransaction tx = _stateManager.CreateTransaction(); | |
Fabric.IAsyncEnumerable<KeyValuePair<Guid, Product>> productsAsync = | |
await reliableDictionary.CreateEnumerableAsync(tx).ConfigureAwait(false); | |
return await productsAsync.ToGeneric() | |
.Select(p => p.Value) | |
.ToListAsync() | |
.ConfigureAwait(false); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment