Мне нужно создать два метода для задачи, каждый из них будет похож на ContinueWith(), но будет выполнять отрисовку в основном потоке пользовательского интерфейса.Действие <Task> реализация
метод перегрузки с параметрами Action
, Action<Task>
Метод возвращает Task (для перегрузки с действиями). Возвращенная задача должна завершиться только после завершения основной задачи и продолжения .
Правильно ли он выполняет функцию с Action
? А как реализовать второй случай с Action<Task> input
с Returned task must finish only after main Task and continuation
Я реализовал
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
WorkAsync WA = new WorkAsync();
Action firstaction = new Action(WA.Count);
WA.Work(firstaction, uiScheduler);
Action<Task> secondaction = new Action<Task>(); //What should be here?
WA.Work(secondaction, uiScheduler);
}
public class WorkAsync
{
public Task Work(Action input, TaskScheduler uiSchedule)
{
return Task.Factory.StartNew(input).ContinueWith((e) => { Console.WriteLine("Done"); }, uiSchedule);
}
public Task Work(Action<Task> input, TaskScheduler uiSchedule)
{
/// What should be here?
}
public void Count()
{
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1000);
Console.WriteLine(i);
}
}
}
}
}
Похоже, что '' '' '' '' '' '' '' '' '' '' '' '' '' '' де? –
Я думаю, что у вас есть неправильная подпись для второго метода - 'public Task Work (Action input, TaskScheduler uiSchedule)' - мне кажется, что это должно быть 'public Task Work (Task current, Action input, TaskScheduler uiSchedule)' , В противном случае появляется, что вы делаете какую-то невозможную рекурсивную задачу. –
Enigmativity
@AlexeiLevenkov, задача выполнить с действием. –
A191919