से मैं में देखा है कई coding examples, साथ ही, क्या मैं इस SO question से समझ सकता हूँ मैं TaskCompletionSourceवापसी टास्क टास्क <TResult> के बजाय TaskCompletionSource
से(i.e., Return Task and not Task<TResult> from the method UploadFilesAsync)
एक गैर सामान्य कार्य वापस जाने के लिए सक्षम होना चाहिए फिर भी निम्न कोड:
public async Task UploadFilesAsync(string fileAPath, string fileBPath)
{
var tcs = new TaskCompletionSource<Object>();
//logic to process files
try
{
await Task.WhenAll(uploadFileAAsync(fileAPath),
uploadFileBAsync(fileBPath));
tcs.TrySetResult(null);
}
catch (Exception e)
{
tcs.SetException(e);
}
finally
{
//logic to clean up files
}
return tcs.Task;
}
निम्न सिंटैक्स त्रुटि का उत्पादन
'UploadFilesAsync(string, string)' is an async method that returns 'Task',
a return keyword must not be followed by an object expression.
Did you intend to return 'Task<T>'?
मैं .NET 4.5 को लक्षित कर रहा हूं। मुझे पता है कि यह कार्य (ऑब्जेक्ट) को वापस करने के लिए काम कर सकता है लेकिन इससे एपीआई को "गंदा" लगता है। क्या यह कार्य (ऑब्जेक्ट) को वापस करने के लिए अभ्यास पसंद करता है या क्या कार्य को वापस करना संभव है (कोड में दिखाए गए गैर-जेनेरिक)?
मुझे फ़ाइलों को अनजिप करना, अपलोड चलाने, और फिर अनपॅक की गई फ़ाइलों को हटाना होगा।मैं चाहता था कि अपलोड एसिंक को चलाने के लिए और यही कारण है कि मैंने उन्हें taskcompletionsource में लपेट लिया ... या जैसा आपने सुझाव दिया था मैंने किया होगा। यह समझ में आता है कि एसिंक एक और कार्य में वापसी को लपेटता है (कोई आश्चर्य नहीं कि एसिंक/प्रतीक्षा के साथ एक कामकाजी उदाहरण देखना मुश्किल था)। धन्यवाद! –
@ जोनाथन हैरिसन: बस जांचने के लिए - क्या आप समझते हैं कि आप * सुझाव क्यों कर सकते हैं जैसा कि मैंने सुझाव दिया है, और यह अभी भी async है? मैं एक और बिट जोड़ूंगा जो मदद कर सकता है ... –
संपादन करने के लिए बहुत बहुत धन्यवाद। उस अवधारणा ने शुरुआत में क्लिक नहीं किया ... यह सुंदर है कि async/await वास्तव में इस तरह एक async शून्य विधि को संभालती है। –