मुझे इस से मारा गया था और विभिन्न कारणों से मैं परियोजनाओं को .NET 4.5 में अपग्रेड नहीं कर सकता था इसलिए मुझे एक वर्कअराउंड विकसित करना पड़ा।
चूंकि यह केवल एक्सएएमएल परियोजनाओं के लिए एक समस्या है, जिसमें xmlns
घोषणा है कि मैं खुद को इंगित करता हूं कि मैं संदर्भित सभी अन्य परियोजनाओं पर एसिंक का उपयोग करने में सक्षम हूं। इसका मतलब है कि मेरा आर्किटेक्चर अभी भी एसिंक/प्रतीक्षा का उपयोग कर रहा है और बाद में .NET 4.5 पर जाने के लिए तैयार है।
लेकिन प्रभावित एक्सएएमएल परियोजनाओं में, मैं संकलक द्वारा अन्यथा किए गए इंतजार की चीजों को मैन्युअल रूप से लागू करता हूं (खराब)।
तो कोड था कि यह साफ करने से पहले:
try
{
var foo = GetFoo();
foo.DoStuff();
var data = await foo.GetDataAsync();
bar.WorkOnData(data);
}
catch (Exception ex)
{
// Logging, throw up a popup, whatever...
HandleError("Failed to get data", ex);
}
अब इस हो जाता है:
var foo = GetFoo();
foo.DoStuff();
var getDataTask = foo.GetDataAsync();
getDataTask.ContinueWith(t =>
{
if (t.IsFaulted)
{
// Logging, throw up a popup, whatever...
HandleError("Failed to get data", t.Exception);
return;
}
if (t.Status == TaskStatus.RanToCompletion)
{
bar.WorkOnData(t.Result);
}
});
निश्चित रूप से आदर्श नहीं है, और इस सटीक बात यह है कि async/await
लिए बनाया गया था है का समाधान। लेकिन यह कम से कम await
के सरल उपयोगों के लिए अल्पकालिक कार्यवाही के रूप में काम करता है।
स्रोत
2012-09-19 08:45:46
क्या आप अपना आदेश पोस्ट कर सकते हैं .rsp? – KMoraz