Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Observable.FromAsyncPattern_C#_Asynchronous_System.reactive - Fatal编程技术网

C# 使用Observable.FromAsyncPattern

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)

我正在使用Rx框架执行异步请求,这一切正常,但是我需要能够在请求/响应之间传递状态对象,因为一旦我处理响应,我需要知道一些只有在发出请求时才知道的附加信息,因此我希望以某种方式传递状态对象

目前我使用的方法如下:

 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));
        }

谢谢,是的,这就是我最后要做的。请看下面的答案。您现在可以使状态为强类型。没有必要再让它们成为对象了。