मैं सी # 5.0 के साथ अपना पहला ऐप बनाने के लिए उत्साहित था, और मैं एसिंक डेटा कॉल के दर्द को कम करने के लिए एसिंक/प्रतीक्षा कीवर्ड का उपयोग करना चाहता था।इंटरफेस में एसिंक कीवर्ड की कमी सी # 5.0 में DI को तोड़ती है?
मैं थोड़ा उलझन में हूं कि इंटरफेस एसिंक कीवर्ड को अनुबंध का हिस्सा होने की अनुमति नहीं देता है, क्योंकि प्रतीक्षा कीवर्ड केवल एसिंक चिह्नित विधियों के लिए काम करता है। इसका मतलब यह होगा कि इंटरफ़ेस संदर्भों के माध्यम से async विधियों को कॉल करना असंभव है। यह अमूर्त तरीकों के लिए भी जाता है। क्या मुझसे कोई चूक हो रही है? इसका मतलब यह होगा कि मेरे नियमित डि-सामान अब कार्य नहीं करेगा:
IAsyncRepository<T> {
Task<IList<T>> GetAsync(); // no 'async' allowed
}
abstract class AsyncRepositoryBase<T> {
public abstract Task<IList<T>> GetAsync(); // no 'async' allowed
// ग्राहक कोड:
IAsyncRepository<Model> repo = ioc.Resolve<IAsyncRepository<Model>>();
var items = await repo.GetAsync(); // DOOOOOH, will not compile!
यह मेरे वर्तमान समाधान है:
public abstract class AsyncRepositoryBase<T>
{
protected Task<IList<T>> _fetcherTask;
protected AsyncRepositoryBase(Task<IList<T>> fetcherTask)
{
_fetcherTask = fetcherTask;
}
public virtual async Task<IList<T>> GetASync()
{
return await _fetcherTask;
}
}
मैं पड़ेगा अमूर्तता और लैंगेज सुविधा के बीच चयन करें? कृपया मुझे बताओ मुझे कुछ याद आ रही है।
कोई भी अमूर्तता एक तरफ या दूसरी तरफ है। लेकिन यह कोई समस्या नहीं है, आपको केवल एसिंक पैटर्न को लागू करने का एक तरीका प्रदान करना होगा। रिटर्निंग IAsyncResult पर्याप्त है। –