Chciałbym oddzwonić funkcja asynchroniczne w ramach subskrypcji Rx.Jak wywołać funkcję asynchroniczną z subskrypcji rx?
E.g. w ten sposób:
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();
}
Co należy zrobić, aby właściwie uchwycić wyjątek?
Po prostu pomyślałem, że mogę umieścić async na pierwszym miejscu. Ale niestety to nie rozwiązuje problemu, z którym się borykam. Opublikuję bardziej wyraźny przykład. –
możliwy duplikat [Czy istnieje sposób na subskrypcję obserwatora jako asynchronicznego] (http://stackoverflow.com/questions/18814805/is-there-a-way-to-subscribe-an-observer-as-async) – Zache