استخدام RX للاتصال بأسلوب خدمة WCF ASYNC يسبب مشاكل في الإغلاق

StackOverflow https://stackoverflow.com/questions/4401566

سؤال

أنا أستخدم حاليًا هذا الرمز TU ، اتصل بـ WebService للحصول على بيانات لصفحة التطبيق. كل شيء على ما يرام حتى أحاول الاتصال بهذه الطريقة 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 تم إنشاؤها بواسطة مكالمة مختلفة (مع وسيطات مختلفة) ، والتي من شأنها أن تفسر سبب نتائجك هي نفسها لجميع الطرق التي تم استدعاؤها في نفس الوقت.

يمكنك الالتفاف على هذه المشكلة المحددة باستخدام أساليب البداية/النهاية ، على الرغم من أنك ستظل على الأرجح مواجهة مشاكل مع الخلاف على الاتصال الأساسي.

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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top