10

का इंतजार नहीं कर सकते हैं तो आप एक कार्य का इंतजार कैसे कर सकते हैं मैं विंडोज 8 रनटाइम घटक विकसित कर रहा हूं ताकि सार्वजनिक इंटरफ़ेस में Task<T> शामिल न हो क्योंकि यह विंडोज रनटाइम प्रकार नहीं है।जब आप

इसका मतलब है कि मैं विधि को async के रूप में चिह्नित नहीं कर सकता और awaitprivate async मेरी लाइब्रेरी में विधियों को नहीं कर सकता। यह मेरे आवेदन तर्क को संभालने के तरीके के बारे में कुछ भ्रम पैदा कर रहा है।

इस तरह मैं वही करता हूं जो मैं सिंक्रनाइज़ करना चाहता हूं।

Result r = TryGetAuthResultFromFile(); 
if(r != null) 
{ 
    return r; 
} 

r = GetAuthResultFromWebAuthenticationBroker(); 
return r; 

समस्या यह है कि TryGetResultFrom फ़ाइल async Task<Result> तरीके और विधि कि r लौटा रहा है IAsyncOperation<Result>

लौटा रहा है मैं इस की कोशिश की है (यह पूरा कोड नहीं है, लेकिन सिद्धांत देखा जा सकता है, संभाल रहे हैं निरंतरता में परिणाम और उन्हें वापस लौटाते हैं, मुझे परिणामों के कुछ frigging IAsyncOperation प्रकारों को करना होगा)।

TryGetAuthResultFromFile().ContinueWith(x=> 
{ 
    if(x.Result != null) 
    { 
     return x.result; 
    } 

    GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=> 
    { 
     return y.Result; 
    }); 
}); 

इस के साथ समस्या यह है कि WebAuthenticationBroker काम प्रतीत नहीं होता है, तो यह यूआई धागे से नहीं कहा जा रहा है है। यह उपयोगी त्रुटि संदेश के बिना उपयोगी NotImplementedException फेंकता है।

मैं TryGetAuthResultFromFile पर कॉल कैसे कर सकता हूं, फिर परिणाम की प्रतीक्षा करें, फिर GetAuthResultFromWebAuthenticationBroker पर कॉल करें?

उत्तर

15

आपका इंटरफ़ेस Task/Task<T> का उपयोग नहीं कर सकता है, लेकिन यह IAsyncAction/IAsyncOperation<T> का उपयोग कर सकता है।

आपका क्रियान्वयन Task/Task<T> उपयोग करें यदि आप एक आवरण है कि AsAsyncAction/AsAsyncOperation/AsyncInfo.Run कॉल के रूप में उपयुक्त हो सकता है।

public interface IMyInterface 
{ 
    IAsyncOperation<MyResult> MyMethod(); 
} 

public sealed class MyClass: IMyInterface 
{ 
    private async Task<MyResult> MyMethodAsync() 
    { 
    var r = await TryGetAuthResultFromFileAsync(); 
    if (r != null) 
     return r; 
    return await GetAuthResultFromAuthenticationBrokerAsync(); 
    } 

    public IAsyncOperation<MyResult> MyMethod() 
    { 
    return MyMethodAsync().AsAsyncOperation(); 
    } 
} 
+0

धन्यवाद, मैंने पहले से ही इस तकनीक का उपयोग पहले से ही किया है और यह वही है जो मुझे चाहिए। मुझे यकीन नहीं है कि मैंने स्पष्ट समाधान क्यों नहीं देखा, घर मुझे लगता है। – BenCr

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^