Tôi muốn gọi lại một chức năng không đồng bộ trong một thuê bao Rx.Làm thế nào để gọi lại chức năng async từ rx đăng ký?
Ví dụ: như thế:
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();
}
Những gì cần phải được thực hiện, để nắm bắt những ngoại lệ đúng cách?
Tôi chỉ nghĩ rằng tôi có thể đặt async ở nơi đầu tiên. Nhưng tiếc là điều này không giải quyết được vấn đề tôi đang gặp phải. Tôi sẽ đăng một ví dụ rõ ràng hơn. –
có thể trùng lặp của [Có cách nào để đăng ký người quan sát không đồng bộ] (http://stackoverflow.com/questions/18814805/is-there-a-way-to-subscribe-an-observer-as-async) – Zache