gpt4 book ai didi

wcf - 使用 Rx 调用 WCF 服务方法 Async 导致 Closure 问题

转载 作者:行者123 更新时间:2023-12-04 06:39:47 25 4
gpt4 key购买 nike

我目前正在使用此代码调用 web 服务来获取应用程序页面的数据。
一切都很好,直到我尝试连续调用此方法 10 次而不等待第一次调用完成。

这样做会导致我遇到闭包问题,并且我的所有结果都得到相同的结果对象。

有没有人在 Rx.Net 之前遇到过这个问题?如果是这样,是否有人有想法或线索,以便我可以解决此问题。

    public void GetPage(long pageId, Action<PageDTO> observer)
{

Observable.FromEvent<GetPageCompletedEventArgs>(
handler => Service.GetPageCompleted += handler,
handler => Service.GetPageCompleted -= handler)
.Select(eventHandler => eventHandler.EventArgs.Result)
.Take(1) // necessary to ensure the observable unsubscribes
.ObserveOnDispatcher() // controls which thread the observer runs on;
.Subscribe(observer, HandleError);

Service.GetPageAsync(pageId);
}

最佳答案

Service总是同一个实例?如果是这样,您将遇到各种疯狂行为 GetPageCompleted事件将由 FromEvent 处理由不同的调用(使用不同的参数)创建,这将解释为什么您的结果对于同时调用的所有方法都相同。

您可以通过使用 Begin/End 方法来解决这个特定问题,但您仍然可能会遇到与底层连接争用的问题。

public void GetPage(long pageId, Action<PageDTO> observer)
{
Observable.FromAsyncPattern<long, PageDTO>(
service.BeginGetAwards, service.EndGetAwards)(pageId)
.ObserveOnDispatcher() // controls which thread the observer runs on;
.Subscribe(observer, HandleError);
}

关于wcf - 使用 Rx 调用 WCF 服务方法 Async 导致 Closure 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4401566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com