Estoy tratando de entender cuándo usar TaskEx.Run
. He proporcionado dos ejemplos de código que escribí a continuación que producen el mismo resultado. Lo que no veo es por eso que tomaría el Task.RunExTaskEx.RunEx
enfoque , estoy seguro de que hay una buena razón y estaba esperando que alguien me podría llenar.Cuándo utilizar TaskEx.Run frente a 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();
}
}
que pueden lograr los mismos resultados al igual que
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();
}
}
El hilo anterior es una discusión sobre los motivos de TaskEx.RunEx, todo tiene que ver con cambios que no podrían incluirse en la funcionalidad .NET central para el CTP, pero se integrará correctamente para la versión final –
'Tarea' .RunEx' to 'TaskEx.RunEx' No hay' Run() 'ni' RunEx() 'en la clase Async CTP' Task'. Ambos están en 'TaskEx'. Corrígeme, si estoy equivocado –