WCF Service Call Async Other WCF Services
-
28-09-2019 - |
سؤال
لقد قرأت عن النمط غير المتزامن القائم على المهام ويبدو رائعًا. الآن ، لدي خدمة WCF تحتاج إلى استدعاء خدمات WCF الأخرى. هذه الخدمات تعود نتيجة الاختلاف. كيف يمكن لـ ASYNC أن تسمي تلك الخدمات بالنمط الجديد وانتظار إكمال الجميع؟
المحلول
تحرير: إذا كنت قد حصلت للتو هذا السؤال لكيفية تحويل هؤلاء إلى Task<T>
المهام - و ومن بعد سوف يكون بقية إجابتي قابلة للتطبيق.
في الأساس ، تحتاج TaskFactory<T>.FromAsync(...)
.
يمكنك استخدام TaskEx.WhenAll
, والتي ستكون في النهاية Task.WhenAll
.
لاحظ أن هذا سينتظر الكل المهام للانتهاء ، حتى لو كان هناك خطأ مبكرًا.
نظرًا لأن المهام لها أنواع نتائج مختلفة ، ستحتاج إلى إعدادها للبدء بها ، وانتظرها جميعًا للانتهاء ، ثم الاستيلاء على النتائج:
var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();
await TaskEx.WhenAll(t1, t2, t3);
var result1 = t1.Result;
var result2 = t2.Result;
var result3 = t3.Result;
// Use the results
بدلاً من ذلك ، ما عليك سوى إطلاق النار على المهام لتبدأ ، وانتظر كل واحدة بشكل منفصل. لاحظ أن المهام الموجودة في TAP هي "ساخنة" - فهي تبدأ بمجرد إنشائها ، وليس عندما تنتظرها. لذلك سيعمل هذا أيضًا - لكن هذه المرة إذا t1
يلقي استثناء ، هو متعود أنتظر لأجل t2
و t3
لإكمال:
var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();
var result1 = await t1;
var result2 = await t2;
var result3 = await t3;
// Use the results
لقد قمت بالتدوين حول هذا ، أولاً عن في انتظار مهام متعددة بشكل عام ثم حول استثناءات عند انتظار مهام متعددة.
نصائح أخرى
إذا كنت تريد أن تعرف عن خطط فريق WCF لدعم نموذج ASYNC/انتظار ، فقم بإلقاء نظرة على منشور المدونة التالي:
أماديو
نرى Async CTP - كيف يمكنني استخدام Async/Achint للاتصال بخدمة WCF؟
للحصول على أمثلة على العملاء والخدمات ASYNC. او استعمل Asyncwcflib, ، يدعم نموذج البرمجة القائم على الممثل ولديه أمثلة على الخدمات التي تطلق الخدمات الأخرى داخل التطبيق أو عبر الشبكة.