का उपयोग कब करें, मैं समझने की कोशिश कर रहा हूं कि TaskEx.Run
का उपयोग कब करें। मैंने नीचे दो कोड नमूने प्रदान किए हैं जो एक ही परिणाम उत्पन्न करते हैं। क्या मैं देखने के लिए असफल क्यों मैं Task.RunExTaskEx.RunEx
दृष्टिकोण ले जाएगा, मुझे यकीन है कि इसका कोई खास कारण है हूँ और उम्मीद कर रही थी किसी में मुझे भर सकता है।TaskEx.Run बनाम TaskEx.RunEx
async Task DoWork(CancellationToken cancelToken, IProgress<string> progress)
{
int i = 0;
TaskEx.RunEx(async() =>
{
while (!cancelToken.IsCancellationRequested)
{
progress.Report(i++.ToString());
await TaskEx.Delay(1, cancelToken);
}
}, cancelToken);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (button.Content.ToString() == "Start")
{
button.Content = "Stop";
cts.Dispose();
cts = new CancellationTokenSource();
listBox.Items.Clear();
IProgress<string> progress = new Progress<string>(s =>
{
listBox.Items.Add(s);
listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1]);
});
DoWork(cts.Token, progress);
}
else
{
button.Content = "Start";
cts.Cancel();
}
}
मैं एक ही परिणाम प्राप्त कर सकते जैसे
async Task DoWork(CancellationToken cancelToken)
{
int i = 0;
while (!cancelToken.IsCancellationRequested)
{
listBox.Items.Add(i++);
listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1]);
await TaskEx.Delay(100, cancelToken);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (button.Content.ToString() == "Start")
{
button.Content = "Stop";
cts.Dispose();
cts = new CancellationTokenSource();
listBox.Items.Clear();
DoWork(cts.Token);
}
else
{
button.Content = "Start";
cts.Cancel();
}
}
उपर्युक्त धागा TaskEx.RunEx के कारणों पर एक चर्चा है, यह सब उन परिवर्तनों के साथ करना है जिन्हें कोर में डाला जा सकता है, सीटीपी के लिए .NET कार्यक्षमता, लेकिन अंतिम रिलीज के लिए ठीक से एकीकृत किया जाएगा –
बदल गया कार्य RUNEx' 'TaskEx.RunEx' के लिए Async CTP 'कार्य' वर्ग में' रन() 'और न ही' RunEx()' है। वे दोनों 'टास्कएक्स' में हैं। मुझे सही करें, अगर मैं गलत हूँ –