いつTaskEx.Run
を使用するのかを理解しようとしています。私は同じ結果を生成する以下に書いた2つのコードサンプルを提供しました。どのような私が見に失敗すると、私は正当な理由があると確信している、 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();
}
}
が、私は同じ結果を得ることができますのように
上記のスレッドは、TaskEx.RunExの理由についての説明であり、CTPのコア.NET機能には反映されなかった変更点に関連していますが、最終リリースでは正しく統合されます。 –
変更されたタスク.RunEx'から 'TaskEx.RunEx'へAsync CTP' Task'クラスには 'Run()'と 'RunEx()'もありません。それらは両方とも 'TaskEx'にあります。私が間違っていると私を訂正してください。 –