I want to perform an async call based for each event raised by a Reactive Extensions Observable. I\'m also trying to keep everything synchronized as I want the async ca
How about:
settingsChangedInMemory
.SelectMany(async _ => await SaveSettings(Extract()))
.Subscribe(x => Apply(x));
Never put an async
in a Subscribe
, you always want to put it in a SelectMany
instead.
You can use the new ForEachAsync
method released in Reactive Extensions (Rx) 2.0 like so:
await observable
.ForEachAsync(async x =>
{
Console.WriteLine(x);
await Task.Delay(1000);
});
ForEachAsync
returns a Task<T>
which completes when the observable completes. More information in my blog post here or this blog post by the reactive extensions team.