मैं हाल ही में कुछ स्थितियों में आया हूं जहां async
विधियां सिंक्रनाइज़ेशन निष्पादित करती हैं, लेकिन फिर भी कार्य वापस करें, इसलिए उनका इंतजार किया जा सकता है, उदा।कार्य। FromResult() बनाम टास्क.रुन()
public virtual Task CreateAsync(TUser user)
{
ThrowIfDisposed();
if (user == null) throw new ArgumentNullException("user");
Context.Save(user);
Context.Flush();
return Task.FromResult(0);
}
निश्चित रूप से यह एक धागा करने के लिए शायद-लंबे समय से चल आपरेशन प्रेषण और अभी भी सक्रिय कार्य वापस जाने के लिए बेहतर है, सही मायने में बहुप्रतीक्षित जा करने के लिए:
public virtual Task CreateAsync(TUser user)
{
ThrowIfDisposed();
if (user == null) throw new ArgumentNullException("user");
return Task.Run(() =>
{
Context.Save(user);
Context.Flush();
});
}
मैं कुछ संदेह है, हालांकि, कि बस टीपीएल धागे को कताई करना सबसे सुरक्षित अभ्यास नहीं है। इन दो अलग-अलग पैटर्न पर कोई टिप्पणी?
जब संभव हो, तो आपको इनमें से किसी एक के बजाय वास्तविक एसिंक विधि को कॉल करना चाहिए। – SLaks
@SLaks दूसरा तरीका एसिंक नहीं है (एक नया कीवर्ड नहीं उपयोग करने के अलावा)? (किसी ऐसे व्यक्ति से आ रहा है जो अक्सर एसिंक सुविधाओं का उपयोग नहीं करता) –
@KyleW: यह अभी भी एक धागा बर्बाद कर देता है। Http://blog.slaks.net/2014-12-23/parallelism-async-threading-explained/ – SLaks