मैं एफ # से सी # लाइब्रेरी का उपभोग करने में सक्षम होना चाहता हूं। ज्यादातर यह बहुत सीधा रहा है। हालांकि, अगर मैं एक ऐसे फ़ंक्शन को कॉल करने का प्रयास करता हूं जो Task<T>
लौटाता है तो मैं लौटाया गया मान प्राप्त करने में सक्षम नहीं हूं।
तो, मेरे पास निम्नलिखित परिभाषा के साथ सी # विधि है:
public async Task<TEvent> ReadEventAsync<TEvent>(string streamName, int position) where TEvent: class
और मैं इस विधि को एफ # से उपभोग करने की कोशिश कर रहा हूं:
let readEventFromEventStore<'a when 'a : not struct> (eventStore:IEventStoreRepository) (streamName:string) (position:int) =
async {
return eventStore.ReadEventAsync(streamName, position)
|> Async.AwaitTask
}
मैं आंशिक रूप से इस फ़ंक्शन को IEventStoreRepository
के उदाहरण के साथ लागू करता हूं और जिस स्ट्रीम नाम से मैं ईवेंट पुनर्प्राप्त करना चाहता हूं:
let readEvent = readEventFromEventStore eventStore streamName
फिर, अंत में, मैं शेष पैरामीटर लागू करता हूं:
let event = readEvent StreamPosition.Start
जब मुझे event
का मान मिलता है तो यह Task<T>
से T
के बजाय एक FSharpAsync<object>
होता है जिसकी मुझे उम्मीद थी।
C# में लिखी गई async
विधि को Task<T>
के रिटर्न प्रकार के साथ कॉल करने और T
के मान तक पहुंचने के F# में सही तरीका क्या है?
1 उत्तर
इस स्थिति के लिए async
अभिकलन व्यंजक (F# कॉलिंग C# कार्य-आधारित XxxAsync विधि) का उपयोग करने का एक विकल्प task
संगणना व्यंजक का उपयोग करना है:
https://github.com/rspeele/TaskBuilder.fs
जिराफ़ F# वेब फ्रेमवर्क कमोबेश इसी कारण से task
का उपयोग करता है:
https://github.com/giraffe-fsharp/Giraffe/blob/develop/DOCUMENTATION.md#tasks
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।
return eventStore. ...
के बजायreturn! eventStore. ...
आज़माएं?FSharpAsync<object>
।