Ich möchte eine asynchrone Funktion innerhalb eines Rx-Abonnements zurückrufen.Wie async-Funktion von RX subscribe zurückrufen?
z. wie das:
public class Consumer
{
private readonly Service _service = new Service();
public ReplaySubject<string> Results = new ReplaySubject<string>();
public void Trigger()
{
Observable.Timer(TimeSpan.FromMilliseconds(100)).Subscribe(async _ => await RunAsync());
}
public Task RunAsync()
{
return _service.DoAsync();
}
}
public class Service
{
public async Task<string> DoAsync()
{
return await Task.Run(() => Do());
}
private static string Do()
{
Thread.Sleep(TimeSpan.FromMilliseconds(200));
throw new ArgumentException("invalid!");
return "foobar";
}
}
[Test]
public async Task Test()
{
var sut = new Consumer();
sut.Trigger();
var result = await sut.Results.FirstAsync();
}
Was muss getan werden, um die Ausnahme richtig zu fangen?
Ich dachte nur, dass ich Async an erster Stelle setzen kann. Aber leider löst das nicht das Problem, mit dem ich konfrontiert bin. Ich werde ein expliziteres Beispiel veröffentlichen. –
mögliches Duplikat von [Gibt es eine Möglichkeit, einen Beobachter als async zu abonnieren] (http://stackoverflow.com/questions/18814805/is-there-a-way-to-subscribe-an-anobserver-as-async) – Zache