Tôi đang cố gắng hiểu khi nào nên sử dụng TaskEx.Run
. Tôi đã cung cấp hai mẫu mã tôi đã viết dưới đây mà sản xuất cùng một kết quả. Những gì tôi không thấy là lý do tại sao tôi sẽ lấy Task.RunExTaskEx.RunEx
cách tiếp cận , tôi chắc chắn có một lý do chính đáng và đã hy vọng ai đó có thể điền vào tôi trong.Khi nào sử dụng TaskEx.Run và 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();
}
}
tôi có thể đạt được kết quả tương tự giống như vậy
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();
}
}
Chủ đề trên là thảo luận về lý do TaskEx.RunEx, tất cả đều liên quan đến những thay đổi không thể đưa vào chức năng .NET cốt lõi cho CTP, nhưng sẽ được tích hợp đúng cách để phát hành cuối cùng –
Đã thay đổi 'Tác vụ .RunEx' đến 'TaskEx.RunEx' Không có' Run() 'cũng không phải' RunEx() 'trong lớp Async CTP' Task'. Cả hai đều trong 'TaskEx'. Đúng, nếu tôi sai –