2016-05-04 13 views
5

में Async विधि में वापसी कैसे रद्द करें मैं रिपॉजिटरी से वेब एपीआई (सी #) में एक विधि कॉल कर रहा हूं। विधि भंडार कुछ भी वापस नहीं कर रहा है। यह शून्य है। मुझे अपनी एपीआई विधि में वापस लौटना चाहिए क्योंकि एसिंक विधि में शून्य वापसी प्रकार नहीं हो सकता है।वेब एपीआई

यह API में मेरी Async विधि है:

[HttpPost] 
    [Route("AddApp")] 
    public async Task<?> AddApp([FromBody]Application app) 
    {   
     loansRepository.InsertApplication(app); 
    } 

और इस भंडार में EntityFrame काम सम्मिलित (मैं परिवर्तन जिस तरह से इस खाट कर सकते हैं)

 public void InsertApplication(Application app) 
    { 

     this.loansContext.Application.Add(app); 
    } 

खेद है कि मैं में परिवर्तन किए है सवाल, मुझे यकीन नहीं है कि मेरे पास क्या होना चाहिए? कार्य

+0

क्या आपके 'टास्क ' लौट जाना चाहिए? –

+0

@ फिलिप पेरे ने खेद में बदलाव किए हैं, मेरे पास कोई वापसी प्रकार नहीं है, यह शून्य है। – Alma

+2

फिर बस 'कार्य' को वापस करें :) –

उत्तर

10

: करने के लिए कोड संशोधित करें।

[HttpPost] 
[Route("AddApp")] 
public async Task AddApp([FromBody]Application app) 
{ 
    // When you mark a method with "async" keyword then: 
    // - you should use the "await" keyword as well; otherwise, compiler warning occurs 
    // - the real return type will be: 
    // -- "void" in case of "Task" 
    // -- "T" in case of "Task<T>" 
    await loansRepository.InsertApplication(app); 
} 

public Task InsertApplication(Application app) 
{ 
    this.loansContext.Application.Add(app); 

    // Without "async" keyword you should return a Task instance. 
    // You can use this below if no Task is created inside this method. 
    return Task.FromResult(0); 
} 
-4

संकलक "रिटर्न स्टेटमेंट गायब" चेतावनी देगा। आप तो वापसी प्रकार Task होना चाहिए कुछ भी वापस जाने के लिए नहीं करना चाहते हैं

[HttpPost] 
[Route("AddApp")] 
public void AddApp([FromBody]Application app) 
{ 
    //add configureAwait(false) as it would give better performance. 

    loansRepository.InsertApplication(app)  
} 
+0

यह है उनके प्रश्न का उत्तर नहीं, लेकिन एक टिप्पणी। कृपया इसके लिए उत्तर अनुभाग का उपयोग न करें। –

+1

और ConfigureAwait के बारे में आपकी टिप्पणी पूरी तरह से बंद है। कृपया वास्तव में क्या करता है इसके बारे में थोड़ा सा पढ़ें और आप इसका उपयोग क्यों करेंगे। –

+0

'async/await' का उपयोग किसी भी कारण से अतिरिक्त अपरिहार्य ओवरहेड जोड़ें। सीधे 'कार्य.रुन' परिणाम पर लौटने पर विचार करें। – Aron

5

जब से तुम "नहीं कर सकते" इकाई की रूपरेखा भंडार बदलने के लिए, आप अपने कार्रवाई विधि अतुल्यकालिक नहीं करना चाहिए, और तुम सिर्फ void लौटना चाहिए:

[HttpPost] 
[Route("AddApp")] 
public void AddApp([FromBody]Application app) 
{   
    loansRepository.InsertApplication(app); 
} 
+2

स्टीफन सभी चीज़ों पर अधिकार है - मैं उनके जवाब के साथ जाऊंगा। –

+0

फिर आप इस विधि को सी # क्लाइंट से कैसे कॉल करेंगे? –

+0

@ फेथविन्स: आप धारावाहिक 'एप्लिकेशन' के साथ अनुरोध निकाय के रूप में '/ AddApp' पर पोस्ट करेंगे। यदि आप अधिक जानकारी चाहते हैं, तो मैं आपके स्वयं के प्रश्न पूछने की सलाह देता हूं। –