में कार्य विलंब को रद्द करना मैं वर्तमान में .NET 4.0 को लक्षित करने वाले प्रोग्राम में .NET 4.5 की Task.Delay()
विधि के लिए एक विकल्प लागू करने का प्रयास कर रहा हूं। मुझे निम्नलिखित कोड this blog पर मिला।.NET 4.0
/* You can write Task-based asynchronous methods by utilizing a TaskCompletionSource.
A TaskCompletionSource gives you a 'slave' Task that you can manually signal.
Calling SetResult() signals the task as complete, and any continuations kick off. */
void Main()
{
for (int i = 0; i < 10000; i++)
{
Task task = Delay (2000);
task.ContinueWith (_ => "Done".Dump());
}
}
Task Delay (int milliseconds) // Asynchronous NON-BLOCKING method
{
var tcs = new TaskCompletionSource<object>();
new Timer (_ => tcs.SetResult (null)).Change (milliseconds, -1);
return tcs.Task;
}
Tasks
मेरे लिए काफी नए हैं। System.Threading.Timer
और TaskCompletionSource
मेरे लिए नया ब्रांड है (आज के रूप में), और मैं उनके साथ थोड़ा संघर्ष कर रहा हूं। सब कुछ एक तरफ, मैं सोच रहा हूं कि मैं इस कोड के लिए CancellationToken
कार्यक्षमता कैसे जोड़ सकता हूं। मुझे लगता है मैं इस तरह Delay()
विधि के लिए एक पैरामीटर जोड़ सकता है यह सोचते हैं हूँ:
Task Delay (int milliseconds, CancellationToken token) // Asynchronous NON-BLOCKING method
{
var tcs = new TaskCompletionSource<object>();
new Timer (_ => tcs.SetResult (null)).Change (milliseconds, -1);
return tcs.Task;
}
... लेकिन तब, जहां मैं टोकन जाँच और विधि से बाहर हो रही के लिए तर्क रख सकता हूं? कहीं कॉलबैक में? क्या यह भी संभव है?
माइक्रोसॉफ्ट एक NuGet पैकेज [Microsoft.Bcl.Async] (https://www.nuget.org/packages/Microsoft.Bcl.Async/) प्रदान करता है जो 4.0 में से 4.5 सुविधाओं में से कई को बैकपोर्ट करता है। यदि आपके पास पैकेज है तो आप 'TaskEx.Delay()' के माध्यम से देरी का उपयोग कर सकते हैं। –