से पहले वापसी मैं एक एएसपी.नेट एमवीसी 4 वेब अनुप्रयोग पर काम कर रहा हूं। मैं .NET 4.5 का उपयोग कर रहा हूं और नई एसिंक्रोनस एपीआई का लाभ लेने की कोशिश कर रहा हूं।एसिंक कार्य पूर्ण
मेरे पास कुछ स्थितियां हैं जहां मैं बाद में चलाने के लिए एसिंक टास्क शेड्यूल करना चाहता हूं, जबकि मैं तुरंत तुरंत एक महत्वपूर्ण मूल्य वापस लौटाता हूं। उदाहरण के लिए, यहाँ एक विधि "लॉगिन" जो मैं एक नया सत्र आईडी जल्दी से जल्दी वापस करना चाहते है, लेकिन एक बार मैं SessionID लौटा दिया है मैं पुराने समय सीमा समाप्त हो SessionID के बाहर साफ करने के लिए करना चाहते हैं:
public async Task<Guid> LogIn(string UserName, string Password)
{
//Asynchronously get ClientID from DB using UserName and Password
Session NewSession = new Session()
{
ClientID = ClientID,
TimeStamp = DateTime.Now
};
DB.Sessions.Add(NewSession);
await DB.SaveChangesAsync(); //NewSession.ID is autopopulated by DB
CleanSessions(ClientID); //Async method which I want to execute later
return NewSession.ID;
}
private async void CleanSessions(int ClientID)
{
//Asynchronously get expired sessions from DB based on ClientID and mark them for removal
await DB.SaveChangesAsync();
}
मैंने टास्क.रुन() और समांतर। इन्वोक() के संयोजन सहित विभिन्न चीजों का एक गुच्छा करने की कोशिश की लेकिन स्वच्छ सत्र कभी नहीं बुलाया जाता है। मैं पृष्ठभूमि कार्य शेड्यूलिंग कैसे प्राप्त करूं?
उस पर आधारित, 'SaveSangesAsync' समाप्त होने पर' क्लीनसेशंस 'प्रारंभ * होना चाहिए। यह शायद 'टास्क' और जाल त्रुटियों आदि के लिए 'प्रतीक्षा' कर सकता है - लेकिन इसे वहां से "जैसा है" काम करना चाहिए, मैं वहां देख सकता हूं –
एक नोट: आपको अपने तरीकों के लिए * कभी भी * async void' का उपयोग नहीं करना चाहिए, शीर्ष-स्तरीय ईवेंट हैंडलर को छोड़कर। –
@MarcGravell: एएसपी.NET प्रतिक्रिया भेजने से पहले सभी 'async शून्य' विधियों को पूरा करने की प्रतीक्षा करेगा। ओप आग और भूलना चाहता है। –