C# 使用Observable.FromAsyncPattern
我正在使用Rx框架执行异步请求,这一切正常,但是我需要能够在请求/响应之间传递状态对象,因为一旦我处理响应,我需要知道一些只有在发出请求时才知道的附加信息,因此我希望以某种方式传递状态对象 目前我使用的方法如下:C# 使用Observable.FromAsyncPattern,c#,asynchronous,system.reactive,C#,Asynchronous,System.reactive,我正在使用Rx框架执行异步请求,这一切正常,但是我需要能够在请求/响应之间传递状态对象,因为一旦我处理响应,我需要知道一些只有在发出请求时才知道的附加信息,因此我希望以某种方式传递状态对象 目前我使用的方法如下: public void ProcessGetRequest(WebRequest request, Action<WebResponse> handle, Action<Exception> error, int delaySeconds = 0)
public void ProcessGetRequest(WebRequest request, Action<WebResponse> handle, Action<Exception> error, int delaySeconds = 0)
{
request.Method = "GET";
Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse)().Delay(new TimeSpan(0, 0, delaySeconds)).ObserveOnDispatcher().SubscribeOnDispatcher().Subscribe(handle, error);
}
在request.BeginGetResponse方法中,我知道您可以传递一个state对象,并通过返回的IAsyncResult对象访问该state对象,但无法在Rx/Observable框架中找到如上所述的方法。有人知道我怎么做吗 应该很简单。通过闭包传递状态。结束时执行的操作如下:
public void ProcessGetRequest<T>(WebRequest request, Action<WebResponse,T> handle, Action<Exception,T> error, T state, int delaySeconds = 0)
{
request.Method = "GET";
Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse)().Delay(new TimeSpan(0, 0, delaySeconds)).ObserveOnDispatcher().SubscribeOnDispatcher().Subscribe(x=>handle(x,state),y=>error(y,state));
}
谢谢,是的,这就是我最后要做的。请看下面的答案。您现在可以使状态为强类型。没有必要再让它们成为对象了。