मैं विंडोज 8 प्रोजेक्ट के लिए एसिंक सेवा के साथ घूम रहा हूं और इस सेवा के कुछ एसिंक कॉल हैं, जिन्हें केवल एक समय में ही बुलाया जाना चाहिए।क्या एक कार्य में कई प्रतीक्षाकर्ता हैं?
public async Task CallThisOnlyOnce()
{
PropagateSomeEvents();
await SomeOtherMethod();
PropagateDifferentEvents();
}
जब से तुम एक ताला बयान में एक async कॉल संपुटित नहीं कर सकते, मैं AsyncLock
पद्धति का उपयोग कर के बारे में सोचा है, लेकिन से मैंने सोचा मैं के रूप में अच्छी तरह से कुछ इस तरह की कोशिश कर सकते:
private Task _callThisOnlyOnce;
public Task CallThisOnlyOnce()
{
if(_callThisOnlyOnce != null && _callThisOnlyOnce.IsCompleted)
_callThisOnlyOnce = null;
if(_callThisOnlyOnce == null)
_callThisOnlyOnce = CallThisOnlyOnceAsync();
return _callThisOnlyOnce;
}
private async Task CallThisOnlyOnceAsync()
{
PropagateSomeEvents();
await SomeOtherMethod();
PropagateDifferentEvents();
}
इसलिए आप चाहते हैं कॉल के साथ समाप्त CallThisOnlyOnceAsync
केवल एक बार एक साथ निष्पादित किया गया, और एक ही कार्य पर एकाधिक प्रतीक्षाकर्ता लगाए गए।
क्या यह करने का यह "वैध" तरीका है या इस दृष्टिकोण में कुछ कमीएं हैं?
मुझे दोनों उत्तरों पसंद आए, लेकिन चूंकि आपने एक कार्यान्वयन प्रस्ताव जोड़ा, इसलिए मैंने आपका चयन किया। साथ ही, मैंने Nuget का उपयोग करके अपनी लाइब्रेरी को इंस्टॉल करने का प्रयास किया, लेकिन मेरे विंडोज स्टोर प्रोजेक्ट में विफल रहा (माइक्रोसॉफ्ट.बीक्ल.एसिंक को हल करने में असमर्थ) – UrbanEsc
"प्रीरलीज शामिल करें" चेकबॉक्स को चेक करने का प्रयास करें। मेरा पैकेज प्रीरलीज है (लेकिन NuGet सही ढंग से इसका पता नहीं लगाता है), और 'माइक्रोसॉफ्ट.बीक्ल.एसिंक' भी प्रीरलीज है (जो NuGet सही ढंग से पता लगाता है)। –